获取字符串日期 YYYY-MM-DD 并将其转换为日期对象,使日期在该用户时区内保持相同?
Take a string date YYYY-MM-DD and convert it into a Date object that keeps the date the same within that users timezone?
我正在尝试获取字符串日期 YYYY-MM-DD 并将其粘贴到日期对象中以与 matDatePicker 一起使用。问题是它显示昨天的日期。我做了一些挖掘,发现问题是 Date 将对象存储为 UTC,然后转换为当前时区。
除了我想使用 matDatePicker 之外,我会完全跳过使用日期。但是,因为日期只是在前端加载,所以以后是否准确并不重要(它没有保存为日期时间,这让我很懊恼)。如何加载带有年月日的日期对象并将其设置为用户当前时区?我无法控制用户所在的时区,所以我正在寻找与时区无关的东西(即我不能持续增加 6 小时)。
如果您尝试转换格式为 YYYY-MM-DD
的日期,您从哪里获取用户的时区? ISO 字符串通常在字符串末尾包含 +0000
,其中最后部分是时区。无论如何,我猜你实际上有一个 ISO 字符串。
问题是当你解析 Date objs 时它想要转换相对于你本地时间的时间。当您使用 UTC 时间时,它会删除用户时区。
所以我们可以做的是获取用户的初始日期时间。
let s = "2022-03-21T11:22:33+0000";
let d = new Date(Date.parse(s));
// Methods on Date Object will convert from UTC to users timezone
// Set minutes to current minutes (UTC) + User local time UTC offset
d.setMinutes(d.getMinutes() + d.getTimezoneOffset())
// Now we can use methods on the date obj without the timezone conversion
// my local time is: "2022-03-21T07:22:33.000Z"
console.log(d) // "2022-03-21T09:22:33.000Z"
我正在尝试获取字符串日期 YYYY-MM-DD 并将其粘贴到日期对象中以与 matDatePicker 一起使用。问题是它显示昨天的日期。我做了一些挖掘,发现问题是 Date 将对象存储为 UTC,然后转换为当前时区。
除了我想使用 matDatePicker 之外,我会完全跳过使用日期。但是,因为日期只是在前端加载,所以以后是否准确并不重要(它没有保存为日期时间,这让我很懊恼)。如何加载带有年月日的日期对象并将其设置为用户当前时区?我无法控制用户所在的时区,所以我正在寻找与时区无关的东西(即我不能持续增加 6 小时)。
如果您尝试转换格式为 YYYY-MM-DD
的日期,您从哪里获取用户的时区? ISO 字符串通常在字符串末尾包含 +0000
,其中最后部分是时区。无论如何,我猜你实际上有一个 ISO 字符串。
问题是当你解析 Date objs 时它想要转换相对于你本地时间的时间。当您使用 UTC 时间时,它会删除用户时区。
所以我们可以做的是获取用户的初始日期时间。
let s = "2022-03-21T11:22:33+0000";
let d = new Date(Date.parse(s));
// Methods on Date Object will convert from UTC to users timezone
// Set minutes to current minutes (UTC) + User local time UTC offset
d.setMinutes(d.getMinutes() + d.getTimezoneOffset())
// Now we can use methods on the date obj without the timezone conversion
// my local time is: "2022-03-21T07:22:33.000Z"
console.log(d) // "2022-03-21T09:22:33.000Z"