【问题标题】:JavaScript Date.toJSON() produces a date which has wrong hours and minutesJavaScript Date.toJSON() 产生的日期有错误的小时和分钟
【发布时间】:2012-11-18 17:54:42
【问题描述】:

我想将日期打印到 ISO-8601 标准:YYYY-MM-DDTHH:mm:ss.sssZ 所以我使用了以下代码行,但我得到了意外的输出

var date = new Date(2012, 10, 30, 6, 51);
print('UTC Format: '+date.toGMTString());
print('toString() method: '+date.toString());
print('toJSON() method: '+date.toJSON());//print hours and minutes incorrectly
print('to UTCString() method: ' + date.toUTCString());

对应的输出是

UTC Format: Fri, 30 Nov 2012 01:21:00 GMT
toString() method: Fri Nov 30 2012 06:51:00 GMT+0530 (India Standard Time)
toJSON() method: 2012-11-30T01:21:00.000Z
to UTCString() method: Fri, 30 Nov 2012 01:21:00 GMT

toJSON() 方法错误地打印小时和分钟,但 toString() 正确打印它,我想知道这是什么原因。 我是否必须向 Date 对象添加时间偏移量,如果是,那么如何?

【问题讨论】:

  • toJSON 部分将我的小时和分钟减去印度的格林威治标准时间 5:30 小时
  • GMT = 不是印度的格林威治标准时间。
  • 我的意思是印度的 gmt + 5.30
  • 我们在数据库中保存日期时注意到了这种效果。我们使用 pikaday 选择日期并使用 toJSON 方法在发送到服务器之前序列化日期,但是当我们取回这个日期并将其放入 pikaday 时,控件(日期对象)根据您的偏移量更正日期。所以当你使用这种方法时要小心,也许你必须在你的情况下使用其他东西。

标签: javascript


【解决方案1】:

date.toJSON() 将 UTC-Date 打印为格式为 json-date 的字符串。

如果你想打印你的本地时间,你必须使用getTimezoneOffset(),它以分钟为单位返回偏移量。您必须将此值转换为秒并将其添加到日期的时间戳中:

var date = new Date(2012, 10, 30, 6, 51);
new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toJSON()

在此答案的先前版本中,偏移量被错误地添加而不是减去。

【讨论】:

  • 如果遇到我的问题,我该怎么做,比如说我定义了 var date = new Date(2012, 10, 30, 6, 51);如何使用 defaultTimezoneOffset 方法添加剩余的 5.30 小时?
  • 这给了我错误的结果。 Sushil Dravekar 的回答给出了正确的结果。
【解决方案2】:
var date = new Date();
console.log(date.toJSON(), new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toJSON());

【讨论】:

  • @abimelex 你和其他人是对的,我更正了我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
  • 2021-08-19
相关资源
最近更新 更多