如何从HTML5日期输入中解析日期?

时间:2013-05-29 23:03:57

标签: javascript html5 forms date input

我的网页上有一个输入,我可以通过获取ISO字符串并拉出前10个字符来设置日期。

date = new Date();
dateInput.value = date.toISOString().substr(0,10);

这完美无缺。我的问题是,当我试图让日期退出时。我有一天假期。

var newDate = new Date(dateInput.value);

我也尝试过以下代码来弥补它,但它并不总是正确的

  

新日期(Date.parse(element.value)+ 86400000)

所以我的问题是:是否有一种优雅的方式可以始终如一地获得正确的日期。我一直在寻找一下,但似乎与Javascript中的日期解析没有很多一致性。

6 个答案:

答案 0 :(得分:21)

如果它是支持浏览器上的实际date输入,那么它将具有valueAsDate property。没有必要解析它。

答案 1 :(得分:5)

它将日期解释为UTC,对于大多数时区,它将使其看起来像“昨天”。一种解决方案可能是将时区偏移量添加回日期以将其“转换”为您当地的时区。

答案 2 :(得分:3)

var newDate = new Date(dateInput.value + 'T00:00');

这将在任何时区提供正确的日期。

答案 3 :(得分:0)

如Marty所说,问题是输入时区的表示(由W3C定义的UTC)和JS时区(本地)之间的差异。解决方案是getTimezoneOffset(以分钟为单位)并将所有内容转换为毫秒:

var today = document.getElementById("myInputDate").valueAsDate;
var tomorrow = new Date(today.valueOf() + 86400000 + (today.getTimezoneOffset() * 60000));

86400000 =一天的毫秒数

today.getTimezoneOffset() * 60000 = timezoneOffset毫秒

答案 4 :(得分:0)

您还可以将输入字符串从YYYY-MM-DD转换为MM / DD / YYYY,然后解析日期以获得正确答案。

示例:

new Date(Date.parse('2018-09-28')) = 2018年9月27日星期四GMT-0500(中央夏令时)

new Date(Date.parse('09/28/2018')) = 2018年9月28日星期五00:00:00 GMT-0500(中央夏令时)

(注意:我在CDT中)

答案 5 :(得分:0)

尝试使用.toLocaleString将日期输入到输入中,并在解析时添加时间,例如:

date = new Date();
dateInput.value = date.toLocaleString("sv-SE", {
    hour: "2-digit",
    minute: "2-digit",
    second: "2-digit"
});

并将该值添加到Date对象中,请使用:

new Date(inputdateInput.value + "T00:00");

我写了一篇有关在Date对象和日期输入here之间进行转换的小文章