无论用户的时区如何,如何从日期字符串中获取日期名称?
How to get the day name from the date string regardless of user's timezone?
给定一个日期(没有时间),例如2021-08-11
,无论用户的时区如何,我如何获得它的日期名称(例如星期三)?
注意尝试使用:
new Date("2021-08-11").toLocaleString('en-AU', { weekday:'long' })
或date-fns
的format
:
format(new Date("2021-08-11"), "EEEE")
例如,如果用户的时区是 GMT-7,则会得出错误的日期(星期二)。
我还没有调查过最新的data-fns
。但是几年前我使用它时,它没有时区支持。由于Date
class 内部没有保留时区信息,所以当时间获取的位置与使用的位置不同时会导致一些问题。有关详细信息,请参阅此 Whosebug post。
有一些库可以解决这个问题。由于您使用的是 date-fns
,您可能想尝试 date-fns-tz.
您可以按照其他评论的建议使用 date-fns-tz。它内部使用 Intl
。如果你只关心得到一天,你可以直接使用 Intl
:
let formatter = new Intl.DateTimeFormat('en-US', {
timeZone: 'UTC',
weekday: 'long',
});
formatter.format(new Date("2021-08-11")) // outputs: "Wednesday"
我建议您也将日期格式化为 ISO,即 "2021-08-11T00:00:00.000Z"
,因为末尾的 Z
将确保在格式化之前以 UTC 格式解析日期。
给定一个日期(没有时间),例如2021-08-11
,无论用户的时区如何,我如何获得它的日期名称(例如星期三)?
注意尝试使用:
new Date("2021-08-11").toLocaleString('en-AU', { weekday:'long' })
或date-fns
的format
:
format(new Date("2021-08-11"), "EEEE")
例如,如果用户的时区是 GMT-7,则会得出错误的日期(星期二)。
我还没有调查过最新的data-fns
。但是几年前我使用它时,它没有时区支持。由于Date
class 内部没有保留时区信息,所以当时间获取的位置与使用的位置不同时会导致一些问题。有关详细信息,请参阅此 Whosebug post。
有一些库可以解决这个问题。由于您使用的是 date-fns
,您可能想尝试 date-fns-tz.
您可以按照其他评论的建议使用 date-fns-tz。它内部使用 Intl
。如果你只关心得到一天,你可以直接使用 Intl
:
let formatter = new Intl.DateTimeFormat('en-US', {
timeZone: 'UTC',
weekday: 'long',
});
formatter.format(new Date("2021-08-11")) // outputs: "Wednesday"
我建议您也将日期格式化为 ISO,即 "2021-08-11T00:00:00.000Z"
,因为末尾的 Z
将确保在格式化之前以 UTC 格式解析日期。