[英]Javascript - Display date time and ignore locale/timezone
我在使用 CMS 时遇到了一些噩梦,它可以在没有时区的情况下保存日期时间。 由于各种基础设施原因我无法调整核心文件,我只能调整CMS领域本身的一些javascript,而不包括外部库(或dayjs UTC插件)。
目前的工作方式:
2020-10-29 05:00
缺少时区2020-10-29 05:00
解析为UTC
并根据浏览器区域设置更改时间。我的想法:
2020-10-29 05:00
以包含浏览器的时区,或偏移日期对象,以便当它被解析为'local'时,它会正确显示我最初的想法只是在显示之前添加/减去偏移量,但它似乎仍然不起作用(我认为是因为 getTimezoneOffset 没有针对夏令时进行调整?):
let date = new Date('2020-10-29 05:00')
console.log(new Date(date.setMinutes(date.getMinutes() + new Date().getTimezoneOffset())))
我想这个问题的另一种形式是:有没有办法解析 UTC 日期时间字符串,就好像它是本地的一样?
如果字符串是 UTC,您应该将其解析为 UTC,然后在 UTC 中执行所有操作。 我认为最简单的方法是使用您自己的函数或库将字符串解析为 UTC。
另外,给定:
new Date('2020-10-29 05:00')
某些浏览器将返回无效日期(他们将其视为支持格式YYYY-MM-DDTHH:mm:ss 的畸形版本)。
通常,由于浏览器不一致,强烈建议不要使用内置解析器。 此外,弄乱时区偏移量也可能导致难以找到问题(例如当应用偏移量导致日期跨越 DST 边界时)。
一个简单的功能来完成这项工作:
function parseAsUTC(s) { let [y, m, d, H, M] = s.split(/\\D/); return new Date(Date.UTC(y, m-1, d, H, M)); } let s = '2020-10-29 05:00'; console.log(parseAsUTC(s));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.