首页 > 解决方案 > 仅当javascript中的输入字符串未提供时如何应用默认时区?

问题描述

我正在尝试编写一个函数,该函数将时间戳字符串作为输入(与 javascriptDate类构造函数的格式相同)并返回自纪元以来的毫秒数。如果时间戳中未指定时区,则应将 UTC 用作默认值。基本上我想要以下但有一个默认时区:

(input) => new Date(input).valueOf();

主要问题是格式繁多。有太多可能的方法来格式化日期,让我编写一个我可以自信的时区解析器。甚至可能有一些我不知道的格式。

我尝试使用Date类中已经使用的解析器,但如果我使用构造函数,我无法判断生成的时区是由于它在时间戳中指定还是默认时区。

new Date('2020-11-11 00:00').valueOf() === new Date('2020-11-11 00:00+02:00').valueOf(); // May be true or false depending on the local timezone

我尝试使用moment-timezone. 它公开了一个setDefault方法,但它不能始终如一地工作:

import moment from 'moment-timezone'; // 0.5.27

moment.tz.setDefault('UTC');
moment('2020-11-11').valueOf(); // 1605052800000
moment('2020-11-11 UTC').valueOf(); // 1605052800000
moment('Nov 11 2020').valueOf(); // 1605045600000 <-- expected 1605052800000 instead. Likely affected by local timezone.
moment('Nov 11 2020 UTC').valueOf(); // 1605052800000

如果只有我可以访问Date该类使用的任何解析器,我就可以根据是否定义时区来区分,但我认为它没有暴露。

如何在不覆盖时间戳中可能的时区定义的情况下使用默认时区?

注意:我使用的是 node.js,因此无需考虑浏览器差异。

标签: javascriptnode.jstimezonedate-parsing

解决方案


推荐阅读