我正试图将年份拉出约会,但出于某种原因,它在一年的第一天就回到了前一年。
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'
关于我做错的任何好主意?或者对此有所帮助。
答案 0 :(得分:7)
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))