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

Gid*_*dle 3 javascript html5 timezone datetime

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

<input type="datetime-local" id="startDate" name="startDate">
Run Code Online (Sandbox Code Playgroud)

和JavaScript:

var startDate = new Date($("#startDate").val());
Run Code Online (Sandbox Code Playgroud)

任何帮助都是极好的.如果需要,我可以发布更多代码.

Mat*_*int 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',' '));
Run Code Online (Sandbox Code Playgroud)

选项2

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

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

var s = $("#startDate").val();
var startDate = moment(s).toDate();
Run Code Online (Sandbox Code Playgroud)