仅当javascript中的输入字符串未提供默认时区时,如何应用默认时区?

问题描述

我正在尝试编写一个函数,该函数需要一个时间戳字符串作为输入(格式与javascript Date类构造函数相同),并返回自纪元以来的毫秒数。如果在时间戳中未指定时区,则应将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,因此无需考虑浏览器的差异。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)