仅使用年份创建日期对象

Pau*_*lCo 0 javascript date

我用来创建Date使用第四语法对象从MDNnew Date(year, month, day, hours, minutes, seconds, milliseconds);但后来我试图设置一个Date对象,只有一年(作为new Date(2017)),但你能指望它被视为一个value,并认为今年的毫秒数。

有什么方法可以仍然容易地按原样使用年份而不更改语法并期望正确设置Date?

Sal*_*n A 5

始终使用long(2+ args)构造函数,以避免出现任何问题。如果只想指定年份,请将month参数设置为0(一月):

var d = new Date(2017, 0);
console.log(d, d.getFullYear(), d.getMonth(), d.getDate());
Run Code Online (Sandbox Code Playgroud)

关于较短的(1 arg)构造函数:它接受字符串或数字(任何其他值都将转换为数字)。自UNIX时代以来,数字被视为毫秒数,new Date(2017)从1970-01-01开始为2.017秒。

另一方面,字符串可以是以下格式之一

此格式包括仅日期形式:

YYYY
YYYY-MM
YYYY-MM-DD

[...]

如果缺少MM或DD字段,则将“ 01”用作值。如果缺少HH,mm或ss字段,则将“ 00”用作值,将不存在sss字段的值设为“ 000”。

尽管第一种选择似乎符合您期望的行为,但它将导致更多的问题而不是解决的问题。JavaScript规范和实现不确定时区:

ES5
缺少的时区偏移量的值为“ Z”。

ES6
如果不存在时区偏移,则将日期时间解释为本地时间。

因此,以下代码会根据实现方式产生不同的日期:

var d = new Date("2017");
console.log(d, d.getFullYear(), d.getMonth(), d.getDate());
Run Code Online (Sandbox Code Playgroud)