获取当地时区的午夜,然后转换为纪元(UTC)

时间:2018-09-08 23:15:49

标签: javascript

我正在处理日期问题,由于某些原因,这对我来说是不合理的,我将不胜感激:

基本上,我让用户使用输入日期方法选择一个日期,这给出了一个没有时间的简单日期字符串,然后我尝试使用以下方法将其转换为日期对象:

let localDate = new Date(this.startDate);

我希望输出结果是本地时间,因为通常new Date()将提供一个本地时间对象,但是结果对象是指定日期的午夜,但采用UTC。

我的目标是获取用户选择日期的午夜(本地时区),然后将其转换为Epoch。目前,当我尝试使用自己的代码时,得到的是所选日期的午夜,但以UTC时间表示。

1 个答案:

答案 0 :(得分:1)

Date MDN Page中对此进行了记录,如下所示:

  

对ISO 8601格式的支持不同之处在于,仅日期字符串(例如   “ 1970-01-01”)被视为UTC,而不是本地。

我建议您将日期对象保存在变量中,然后将小时手动设置为0。一个例子是:

var d = new Date("2018-09-08");
d.setHours(0);

这样,您将小时设置为00:00:00,并将其保留为本地时间。问题是此问题取决于浏览器。我已经在Safari和Chrome上进行了测试,并且可以正常工作。新的日期是本地时间,但不是00:00。例如,我在格林尼治标准时间+3上,新日期显示的小时是03:00:00 GMT+0300

即使如此,在Firefox中这也不起作用。 Firefox将其作为世界标准时间00:00。所以您在这里有一些选择。您可以使用new Date().getTimezoneOffset();获得时区偏移。请注意,此方法容易出错。您可以使用以下内容来计算当地时间与UTC -(new Date().getTimezoneOffset() / 60)的时差,并用它在日期字符串中指定时区。

这很快就会变得复杂,您可能会在Javascript中遇到一些奇怪的问题。因此,如果您只需要使用日期作为字符串,则适用于所有浏览器的简单解决方案就是使用:

var d = new Date("2018-09-08");
d.toLocaleString();

希望这对您有帮助!