假设我有一个字符串形式的日期:
2022-01-05
我想将其转换为以下格式:
Jan 5, 2022
下面的代码是如何实现的?
const shortDateFormat = new Intl.DateTimeFormat("en-US", {
dateStyle: "medium",
});
shortDateFormat.format(new Date("2022-01-05"));
但我得到了以下结果:
Jan 4, 2022
看起来问题是本地化问题。我在纽约,因此创建新日期会创建错误的日期时间:
new Date("2022-01-05")
# Tue Jan 04 2022 19:00:00 GMT-0500 (Eastern Standard Time)
如何设置日期格式而不担心本地化问题?注意:
这些日期以UTC
表示,我的前端显示了这一事实。
4条答案
按热度按时间k3fezbri1#
这可以解决你的问题。
更多详情here
对于选项,您可以通过以下方式传递时区:
或者
您可以通过以下方式获取浏览器上的当前时区:
其他时区如下:
vdgimpew2#
好吧,你正面临着一个本地化的问题。我想一个小技巧会帮助你避免这个问题。
假设我们有一个日期字符串'2022-01- 05'。我们将它转换成一个数字数组,字符串将是[2022,1,5]。然后我们将数字作为Date()构造函数的参数传递,沿着传递小时、分钟和秒。这样,它将被解析为UTC日期字符串,您的问题就解决了。让我们这样做:
这里,我们做了**
dateNums[1] - 1
,因为我们必须将月份作为索引传递,因此我们将其递减。我们将参数传递到Date()构造函数中,作为Date(year,monthIndex,day,hours,minutes,seconds)**我想你的问题解决了:)
j8ag8udp3#
下面是toUTCString方法的一种非常规方法。
请参阅以下带注解的片段:
5rgfhyps4#
将UTC时区添加到
DateTimeFormat
选项。注意:
Etc/UTC
是规范的,有几个替代项,例如UTC
、Etc/Universal
、Etc/GMT[+0]
或Etc/Zulu
。请参阅this list。