0

我从一个 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)

嗯?为什么我输了一天?

4

3 回答 3

3

您确实在这里遇到了一个有趣的情况,这是由创建 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)

案件在哪里:

  • 标准
  • 用。。。来代替 '/'
  • 分为年/月/日

你可以在这里看到它的作用

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

于 2013-09-01T02:06:31.170 回答
0

我建议让它2013,08,08看起来不喜欢连字符

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

日期对象需要

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

于 2013-09-01T01:56:24.303 回答
0

这应该工作:

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

所以在你的情况下:

new Date(mydate.substring(0,10).split("-"))
于 2013-09-01T02:34:52.907 回答