Javascript new Date在前一天晚上8点发布

时间:2013-10-26 10:07:01

标签: javascript

xdate: 2013-10-26  = 
Fri Oct 25 2013 20:00:00 GMT-0400 (Eastern Daylight Time)

xdate: Oct 26, 2013  = 
Sat Oct 26 2013 00:00:00 GMT-0400 (Eastern Daylight Time)

xdate: 10/26/2013  =
Sat Oct 26 2013 00:00:00 GMT-0400 (Eastern Daylight Time)

xdate: Oct. 26, 2013  =
Sat Oct 26 2013 00:00:00 GMT-0400 (Eastern Daylight Time)

当我使用带有上述字符串的新日期(xdate)在javascript中创建日期时,它们似乎都能正常工作,除了前一天晚上8点出现的yyyy-mm-dd。不幸的是,这是HTML5 type = date创建的格式。任何方式让该字符串也创建一个正常的日期。

我想我的问题更多:为什么这种格式会创建一个4小时的日期。我使用2013-10-26创建一个日期,然后做一个getDate并获得第25个。这似乎不对!!

2 个答案:

答案 0 :(得分:1)

  

前一天晚上8点出现

不,你的约会时间不会在前一天晚上8点到来。请注意,您创建的日期是UTC日期。 您看到的原因是因为您的当地时区是UTC(格林威治标准时间-4)之前的4小时。这只是基于您的本地时区计算的日期的 演示文稿 ,在内部,日期时间是 由毫秒数表示 自01/01/1970 00:00:00 UTC。

您可以使用Date.getTime()获取日期的内部表示,这将在所有时区返回相同的值。例如,使用:

var date = new Date("2013-10-26");
  • 当您的当地时区为GMT-4时:您会看到演示文稿为:Fri Oct 25 2013 20:00:00 GMT-0400

  • 当您的当地时区为GMT + 7时。您会看到:Sat Oct 26 2013 07:00:00 GMT+0700

date.getTime()会返回 相同的值 。这是你应该关心的价值。

答案 1 :(得分:0)

您可以像这样创建数据并避免此timeone offset问题:

xdate = '2013-10-26';
var date = new Date(xdate.replace(/-/g, ','));

<强>测试

var d1 = new Date(xdate); // Fri Oct 25 2013 20:00:00 GMT-0400 (EDT)

var d2 = new Date(xdate.replace(/-/g, ',')); // Sat Oct 26 2013 00:00:00 GMT-0400 (EDT)

注意d1d2之间日期值的差异。

d2Oct 26 2013-次替换而显示,的正确值。