0
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)

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

我想我的问题更多:为什么这种格式会创建一个休假 4 小时的日期。我使用 2013-10-26 创建一个日期,然后执行 getDate 并获得 25 日。这似乎是错误的!

4

2 回答 2

1

前一天晚上8点出来

不,您的约会时间不会出现在前一天晚上 8 点。请注意,您创建的日期是 UTC 日期。您看到的原因是您的本地时区比 UTC (GMT-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()返回相同的值。这才是你应该关心的价值。

于 2013-10-26T10:23:31.057 回答
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)

d1注意和之间的日期值差异d2

d2Oct 26 2013因此-,替换显示正确的值。

于 2013-10-26T10:29:49.830 回答