将 JavaScript Date 对象转换为 JSON 字符串时日期更改为前一天
Posted
技术标签:
【中文标题】将 JavaScript Date 对象转换为 JSON 字符串时日期更改为前一天【英文标题】:The date changing to one day before while converting JavaScript Date object to a JSON string 【发布时间】:2020-06-20 10:07:33 【问题描述】:我想将一个日期对象(日期为 MM/DD/YYYY 格式的“12/01/2019”)作为 JSON 字符串传递给 API。但是在将此日期(不考虑时区)转换为 JSON 字符串时,日期会更改为前一天。请看下面给出的代码:
var newDate = new Date("12/01/19");
console.log(newDate) // Showing Sun Dec 01 2019 00:00:00 GMT+0530 (India Standard Time)
var jsonDate = JSON.stringify(newDate);
console.log(jsonDate) // Showing "2019-11-30T18:30:00.000Z"
日期 2019 年 12 月 1 日更改为 2019 年 11 月 30 日。就我而言,我无法考虑时间或时区。我也不能使用“Moment JS”。
为什么会这样?谁能说明这个奇怪问题背后的原因?
【问题讨论】:
【参考方案1】:由于您的日期字符串是非标准格式,Date
构造函数将其视为本地时间(请参阅“假定时区差异”部分中的Date.parse()
手册)。但是,JSON.stringify()
调用 Date.toJSON()
,后者调用 Date.toISOString()
,它始终输出具有零 UTC 偏移量的时间。因此,您需要通过减去时区偏移量将您的日期转换为 UTC,这可以通过Date.getTimezoneOffset()
获得。
或者,提供 ISO 格式 (YYYY-MM-DD
) 日期字符串并且不需要调整,因为 Date
构造函数会将其视为 UTC 时间。
// non-standard date format
var newDate = new Date('12/01/19');
console.log(newDate.toJSON());
var os = newDate.getTimezoneOffset();
newDate = new Date(newDate.getTime() - os * 60 * 1000);
console.log(newDate.toJSON());
// ISO format date
var newDate2 = new Date('2019-12-01');
console.log(newDate2.toJSON());
【讨论】:
@VigneshVS 不用担心 - 我很高兴能帮上忙。以上是关于将 JavaScript Date 对象转换为 JSON 字符串时日期更改为前一天的主要内容,如果未能解决你的问题,请参考以下文章