输入类型datetime-local设置了错误的时区

HTML Input type datetime-local setting the wrong time-zone

本文关键字:错误 时区 设置 类型 datetime-local 输入      更新时间:2023-09-26

我创建了一个应用程序,它接受HTML输入并通过JavaScript在本地日历事件上创建一个事件。它从<input type="datetime-local">取时间,它输入了不同的时间因为它选择了不同的时区。如果我输入下午1点作为时间,它将返回上午8点。

<input type="datetime-local" id="startDate" name="startDate">

和JavaScript:

var startDate = new Date($("#startDate").val());

任何帮助都会很棒。我可以张贴更多的代码,如果需要的话。

HTML5 datetime-local输入类型将返回一个字符串值,其中包含ISO8601格式的日期和时间,具有分钟精度,并且没有任何时区偏移。

例如:2014-07-12T01:00

当涉及到从字符串解析日期时,JavaScript date对象是出了名的不一致。在大多数实现中,当您提供这样的字符串时,它会错误地假设该值是UTC格式。因此,您返回的Date对象将根据您本地计算机的时区偏移量进行调整。

有两种方法可以解决这个问题:

选项1

将字符串操作为可能被Date对象的解析器解释为本地时间的格式。具体来说,将破折号(-)替换为正斜杠(/),并将T替换为空格。

var s = $("#startDate").val();
var startDate = new Date(s.replace(/-/g,'/').replace('T',' '));

选项2

使用具有更强大的日期解析能力的库。有几种可用的。其中最流行的是moment.js.

Moment.js有很多选项,但它的默认行为恰好是你所需要的。因此,您可以直接将字符串传递给moment构造函数,而不需要任何参数。
var s = $("#startDate").val();
var startDate = moment(s).toDate();