getFullYear在一年的第一天返回年份

时间:2016-01-28 01:43:08

标签: javascript coffeescript

我正试图将年份拉出约会,但出于某种原因,它在一年的第一天就回到了前一年。

import numpy as np
import matplotlib.pyplot as plt

a = np.random.normal(size=1000)
b = np.random.normal(size=1000)

fig = plt.figure(figsize=(6,6))

plt.plot(a,b,'g.')
plt.xlabel("x axis label")
plt.ylabel("y axis label")
plt.title("Random numbers in a scatter plot")

fig.savefig("test.png")

将返回'2011'和

new Date('2012-01-01').getFullYear()

将返回'2012'

关于我做错的任何好主意?或者对此有所帮助。

3 个答案:

答案 0 :(得分:7)

假设它是UTC,

base_popularity, 0))将解析日期。创建的new Date('2012-01-01')对象包含您的时区,因此在打印出Date的结果时会考虑到这一点。如果你在GMT什么的,这意味着你要回到去年。您可以通过调用getYear()来忽略时区并仅处理UTC。

答案 1 :(得分:0)

new Date(dateString)将返回当时英格兰格林威治的时间。如果你想要你想要的那一年,你可以这样做:

new Date('2012-01-01T00:00:00').getFullYear();

也许你喜欢这个:

function dateFromString(dateString){
  return new Date(dateString+'T00:00:00');
}
console.log(dateFromString('2012-01-01').getFullYear());

答案 2 :(得分:0)

正如其他人所说,你的问题是主持人正在解析' 2012-01-01'好像你在GMT,时间是00:00:00。但是,您的系统设置为格林威治以西的时区,并且在获得日期年份时会将其考虑在内,以便您获得上一年12月31日的日期。

一个基本规则是永远不会使用Date构造函数(或Date.parse执行相同的操作)来解析字符串,因为它在很大程度上取决于实现并且不一致。根据ISO,不带时区的ISO 8601日期应视为本地日期。但是,在ECMAScript ed 3中,它可以被视为任何东西(IE到8并且包括版本8根本没有解析它)。然后ES5表示将其视为UTC(与ISO相冲突)。然后ECMAScript 2015似乎推断它被视为本地,哪些浏览器开始做,但TC39表示将其视为UTC,这是大多数现代浏览器所做的(但仍然有很多旧的浏览器不在其中)

因此,如果您想要一致性,请手动解析日期字符串,例如要将ISO 8601日期视为本地日期,请使用以下函数:



/*  Parse ISO 8601 date string without time zone
**  as a local date
**  @param {string} s - date string to parse in format yyyy-mm-dd
**  @returns {Date}   - local Date, or invalid date if any value is
**                      out of range
*/
function parseISOLocal(s) {
  var b = s.split(/\D/);
  var d = new Date(b[0], --b[1], b[2]);
  return d && d.getMonth() == b[1]? d : new Date(NaN);
}

var s = '2012-01-01';

document.write(parseISOLocal(s))




相关问题