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

时间:2014-07-11 17:53:50

标签: javascript html5 datetime timezone

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

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

JavaScript:

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

任何帮助都会很棒。如果需要,我可以发布更多代码。

1 个答案:

答案 0 :(得分:10)

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

例如:2014-07-12T01:00

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

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

选项1

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

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

选项2

使用具有更强大的日期解析功能的库。有几个可用。其中最受欢迎的是moment.js

Moment.js有很多选项,但恰好是默认行为正是您所需要的。因此,您只需将字符串传递给不带任何参数的矩构造函数。

var s = $("#startDate").val();
var startDate = moment(s).toDate();