Date.toLocaleString 使用区域设置格式但不调整时区

Date.toLocaleString that uses locale formatting but doesn't adjust timezone?

本文关键字:调整 时区 格式 设置 toLocaleString 区域 Date      更新时间:2023-09-26

我的图(我不想修改的复杂JS库)需要本地时间的Javascript时间戳(图不会根据时区和夏令时进行调整,因此必须在数据库端完成)来绘制时间轴 - 源数据几乎是不可触碰的。

我使用相同的数据来显示工具提示,这几乎是"自己做饭",以显示数据点的精确值。

现在问题来了:

  • 如果我使用Date(x).toUTCString()我会根据国际区域设置(英文月份和日期名称等)获得正确的值。
  • 如果我使用Date(x).toLocaleString()我得到了正确的格式,但显示的日期与我的时区+DST偏移量相差;它已经添加到服务器端,现在函数再次添加它。

Date(x).toStringDate(x).toGMTString也没有帮助。

如何获取未调整时区的区域设置格式日期?

实现此目的的方法是初始化 Date 对象以包含 GMT 中的正确时间,而不是将其初始化为本地时间,然后它认为是 GMT 并在重新初始化期间重新调整。为了做到这一点,我们滥用了Date(Year,Month,day,hour,minute,seconds,ms)Date构造函数语法。这违反了标准,但适用于所有主流浏览器:

      Date(0,0,0,0,0,0,x).toLocaleString();

这将打印正确本地化的字符串,x包含本地时间戳。

如果您的x不是包含毫秒数的 int,而是日期错误的 javascript Date 对象,请使用:

      Date(0,0,0,0,0,0,x.getTime()).toLocaleString();