gpt4 book ai didi

javascript - `new Date(Date.UTC)` 的奇怪行为

转载 作者:行者123 更新时间:2023-12-03 00:17:30 25 4
gpt4 key购买 nike

new Date(Date.UTC(...)) 的奇怪行为将日期从UTC转换为用户的本地时间

我从服务器获取的时间戳类似于 2019-02-01 14:28:16我正在尝试以安全的方式将此时间戳转换为用户本地时间,以避免无效日期错误。

但令人惊讶的是,它将2月1日转换为2月5日。这是场景:

const myDate = new Date('2019-02-01 14:28:16');

console.log('Step 1: MyDate: ' + myDate.toString());

const utcFormateOfMyDate = Date.UTC(
myDate.getFullYear(),
myDate.getMonth(),
myDate.getDay(),
myDate.getHours(),
myDate.getMinutes(),
myDate.getSeconds(),
myDate.getMilliseconds()
);

console.log('Step 2: utcFormateOfMyDate: ' + utcFormateOfMyDate.toString()); // 1549376896000

console.log('Step 3.1 => ' + new Date(utcFormateOfMyDate)); // Tue Feb 05 2019 19:28:16 GMT+0500 (Pakistan Standard Time

console.log('Step 3.2 => ' + Date(utcFormateOfMyDate)); // Fri Feb 01 2019 19:43:36 GMT+0500 (Pakistan Standard Time)

我所做的唯一更改是添加了关键字,并且转换后的时间戳从2月1日跃升至2月5日(将来);引用截图

enter image description here

虽然删除 new 关键字解决了问题,但我找不到这个神奇效果的解释。有人可以帮助我理解这种行为吗?

最佳答案

正如评论中所述,您遇到的问题是您通过意外传递 Date.getDay 值(而不是 Date.getDate)来比较苹果和橙子。 ) 转换为 Date.UTC 并将结果与​​直接解析时间戳的输出进行比较。也就是说,您不应依赖 new Date()Date() 来解析时间戳,因为浏览器实现各不相同,并且您可能会得到不一致的结果。

相反,您可以使用从服务器获取的时间戳格式执行类似以下操作:

const timestamp = '2019-02-01 14:28:16';
const [y, m, d, hh, mm, ss] = timestamp.match(/\d+/g);
const date = new Date(Date.UTC(y, m - 1, d, hh, mm, ss));
console.log(JSON.stringify(date));

// date as UTC string
console.log(date.toUTCString());

// date as local string
console.log(date.toString());

关于javascript - `new Date(Date.UTC)` 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54482040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com