JavaScript Date()返回错误的时间

JavaScript Date()返回错误的时间,javascript,date,Javascript,Date,我的简单测试: var ds=“2018/2/28 15:59”; 控制台日志(ds); var da=日期(ds); 控制台日志(da); ds=“2018-2-28 15:59”; 控制台日志(ds); var da=日期(ds); 控制台日志(da)您忘记在日期()之前添加新的 这意味着您只是调用了一个名为Date()的函数,该函数(默认情况下)重新运行当前日期和时间 var ds=“2018/2/28 15:59”; 控制台日志(ds); var da=新日期(ds); 控制台日志(

我的简单测试:

var ds=“2018/2/28 15:59”;
控制台日志(ds);
var da=日期(ds);
控制台日志(da);
ds=“2018-2-28 15:59”;
控制台日志(ds);
var da=日期(ds);

控制台日志(da)
您忘记在
日期()之前添加
新的

这意味着您只是调用了一个名为
Date()
的函数,该函数(默认情况下)重新运行当前日期和时间

var ds=“2018/2/28 15:59”;
控制台日志(ds);
var da=新日期(ds);
控制台日志(da);
ds=“2018-2-28 15:59”;
控制台日志(ds);
var da=新日期(ds);
控制台日志(da)我尝试了这个

var ds = "2018/2/28 15:59"; 
var da = new Date(ds);
它告诉我日期2018-02-28815:59:00.000Z。我得到了正确的时间和日期。

var da=date(ds)
此处日期给出当前时间,即使您传递了参数

试试这个

var ds = "2018/2/28 15:59"; 
var da = new Date(ds);
var ds=“2018/2/28 15:59”;
var da=新日期(ds)


这使得2018-02-28T10:29:00.000Z除了(您忘记了新的
)之外,您的日期字符串无效。编码“2018年2月28日12点15分59分标志着2018年2月28日CE开始”的方式是
“2018-02-28815:59Z”
。您的系统(和我的系统)可能会将
“2018/2/28 15:59”
识别为有效的日期字符串,但这取决于实现,并且容易失败。规范中唯一认可的格式是。

为什么不使用“新日期(…)”而不是“日期(…)”?请注意日期是如何错误的。您的参数将被忽略,您将从普通的
Date()
中得到相同的结果。(
Date()
在不用作构造函数时会有不同的行为,如在
new Date()
中。但是后者也不能保证解析许多格式,所以完全避免它。)为什么不使用矩量.js解析和调整日期:看看你的手表。它与你得到的结果相符吗?关于“时区差异是30的倍数”,不一定。有些时间为15或45分钟,例如尼泊尔标准时间为UTC+05:45,查塔姆标准时间为UTC+12:45。添加“new”后,下一个问题的答案将是:“将JavaScript Date作为函数调用(即,不使用新运算符)将返回表示当前日期和时间的字符串。”“正确方式”的第二个参数应为1(2月),而不是2(3月)。-)@罗布:谢谢。为了更好地说明原因,我将其显示得稍有不同。您也可以将每段数据作为单独的参数提供,并避免所有可能的歧义,但由于某些原因,它不如字符串那么流行。即使某些当前浏览器无法正确解析“2018-02-28815:59”,也不应使用内置解析器(例如,Safari 11将其视为UTC,而非本地)。根据规范,这是正确的行为,应该是可靠的。当然,这不是ISO 8601规范,但它仍然有很好的规定。@AuxTaco您的评论对我来说是不明确的。根据ECMA-262(与ISO 8601一致),没有时区的ISO 8601扩展格式应该被解析为本地格式,但Safari get错了,这进一步证明了内置解析器不可靠。@ECMA-262,5.1版中的RobG:“ECMAScript基于ISO 8601扩展格式的简化定义了日期时间的字符串交换格式。格式如下:YYYY-MM-DDTHH:MM:ss.sssZ”,“Z是指定为“Z”的时区偏移量”(对于UTC)或“+”或“-”后跟一个时间表达式HH:mm”,“缺少的时区偏移量的值是“Z”。“对像“2018/2/28 15:59”这样的字符串的解析取决于实现,可能会或可能不会生成一个与“2018-02-28810:29:00.000Z”等效的日期。我当前使用的一个不,
新日期(“2018/2/28 15:59”).toISOString()
返回“2018-02-28T05:59:00.000Z”,其他人可能会给出无效的日期:-(