JS将带有时区的日期数组转换为UTC或GMT + 0

时间:2019-04-03 18:55:21

标签: javascript json timezone-offset

好..所以我有这个插件,可以为我生成一系列日期。问题是我无法修改此插件,因为它已嵌入到应用程序核心中,并且从中央数据库获取数据。

这就是问题所在,日期数组应用了本地时区偏移,所以基本上元素看起来像这样:

0: Thu Apr 11 2019 00:00:00 GMT+0100 (hora de verano de Europa occidental)
1: Fri Apr 12 2019 00:00:00 GMT+0100 (hora de verano de Europa occidental)

我需要将此数组传递给Web服务(使用axios),所以当我这样做

JSON.stringify(MyArray)

该值在应用时区偏移的情况下转换为文本格式的时间:

"2019-04-10T23:00:00.000Z"

如您所见,由于应用了时区偏移,因此没有显示00:00:00,而是显示23:00:00和实际日期的前一天

有什么解决方法吗?也许可以将整个数组转换为GMT或使JSON.stringify忽略时区?

1 个答案:

答案 0 :(得分:0)

所以;假设您有这个来自JSON的日期数组:

// WE ASSUME THIS IS A SAMPLE ARRAY FROM A SLICE OF YOUR JSON DATA
[
    Thu Apr 11 2019 00:00:00 GMT+0100 (hora de verano de Europa occidental),
    Fri Apr 12 2019 00:00:00 GMT+0100 (hora de verano de Europa occidental)
]

您可能希望将数组运行到map函数中,并在map函数中,将GMT日期转换为适当的日期(例如UTC或其他)。方法如下:

// FIRST ASSIGN THE DATE ARRAY TO A VARIABLE SO YOU CAN REFERENCE IT EASILY.
const dateArray =  [
    Thu Apr 11 2019 00:00:00 GMT+0100 (hora de verano de Europa occidental),
    Fri Apr 12 2019 00:00:00 GMT+0100 (hora de verano de Europa occidental)
]; // THIS WOULD IMPLY WHATSOEVER VARIABLE HOLDS YOUR DATE ARRAY....

// TO CONVERT THE DATE TO SAY UTC OR SO, YOU COULD DO THAT WITHIN MAP LIKE SO
const utcDate  = dateArray.map((gmtDateString) => {
    const gmtDateObj  = new Date(gmtDateString);
    return gmtDateObj.toUTCString();
});  

// NOW, YOU CAN SHIP THE `utcDate` WITH AXIOS...
// YOU MAY HAVE TO CHECK IF YOU NEED TO STILL CALL `JSON.stringify(utcDate);`