为什么Javascript更改我的日期?

时间:2013-09-01 01:37:23

标签: javascript datetime

我从ajax请求中获取一个日期值,如下所示:

"2013-08-08T00:00:00"

那没关系,所以我解析了日期:

mydate = mydate.substring(0,10);

这给了我:

"2013-08-08"

太好了,现在我要把它变成一个真实的日期:

mydate = new Date(mydate.substring(0,10))

得到:

Wed Aug 07 2013 20:00:00 GMT-0400 (Eastern Daylight Time)

咦?为什么我失去了一天?

3 个答案:

答案 0 :(得分:2)

这确实有一个有趣的情况,这是由于当你创建一个Date对象时,除非你指定一个时区偏移,它假设你的日期输入是UTC时间,然后转换它。这只是因为您使用' - '而不是'/'

输入了值

编辑:更正,我相信您的日期可能会以UTC时间的形式进行,然后转换为相应的EDT时间。这可以解释为什么设置精确值或使用'/'会返回不同的结果。 '/'可能表示EDT时间,而' - '表示UTC时间。

见:

var asString = "2013-08-08T00:00:00" var mydate =
asString.substring(0,10);

var cDate1 = new Date(mydate);

var cDate2 = new Date(mydate.replace('-', '/'));

var asSplit = mydate.split('-'); 
var cDate3 = new Date(asSplit);

alert(cDate1 + "\n" + cDate2 + "\n" + cDate3);

产生以下内容:

Wed Aug 07 2013 20:00:00 GMT-0400 (Eastern Daylight Time)
Thu Aug 08 2013 00:00:00 GMT-0400 (Eastern Daylight Time)
Thu Aug 08 2013 00:00:00 GMT-0400 (Eastern Daylight Time)

案件如下:

  • 标准
  • 将' - '替换为'/'
  • 分为年/月/日

您可以在行动here

中看到它

编辑:注意到loxxy指出的错误

答案 1 :(得分:0)

我建议改为2013,08,08 似乎它不喜欢连字符

http://www.w3schools.com/jsref/jsref_obj_date.asp

日期对象需要

var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);

答案 2 :(得分:0)

这应该有效:

new Date("2013-08-08".split("-"))

所以在你的情况下:

new Date(mydate.substring(0,10).split("-"))