来自<input type =“date”/>的JavaScript日期对象

时间:2014-05-13 21:03:26

标签: javascript html5 date object input

我试图在focus.add_days函数中创建一个javascript日期对象,以便在元素中的给定日期添加几天。 问题是javascript对象并不期望字符串&#34; Y-m-d&#34;那么如何在不解析字符串的情况下创建日期对象&#34; Y-m-d&#34;成碎片,还是唯一的方法?

trigger = {
fecha_ini: function(){
    $('input[name="fecha_ini"]').on('change',function(){
      console.log('hi');
      var fecha_fin = $(':input [name=fecha_fin]');
      var min = $(this).val();
      //here is where i pass the "Y-m-d" string as the date argument
      var max = fechas.add_days(min,31*4);
      fecha_fin.attr('min',min);
      fecha_fin.attr('max',max);
      fecha_fin.val('');
    })
  }
};

fechas = {
  add_days: function addDays(date, days) {
    //here is where i use the string "Y-m-d" to create the date object, but obviusly doesnt work
    var result = new Date(date);
    result.setDate(date.getDate() + days);
    return result;
}
};

trigger.fecha_ini();

5 个答案:

答案 0 :(得分:8)

  

如何在不解析字符串的情况下创建日期对象&#34; Y-m-d&#34;成碎片,还是唯一的方法?

虽然 Date.parse 会将y / m / d /格式的字符串转换为日期对象,但手动解析是唯一明智的方法:

// s is format y-m-d
// Returns a date object for 00:00:00 local time
// on the specified date
function parseDate(s) {
  var b = s.split(/\D/);
  return new Date(b[0], --b[1], b[2]);
}

ES5指定了所有浏览器都应支持的form of ISO 8601,但不一致或所有正在使用的浏览器都不支持它。

答案 1 :(得分:8)

使用valueAsDate

  

valueAsDate
  退货:Date

  返回/设置元素的值,解释为日期,如果无法转换,则设置为null

<强>演示:

&#13;
&#13;
<input type="date" id="d" value="2018-02-14">

<button onclick="console.log( document.getElementById('d').valueAsDate )">
change the date (or not) and click me
</button>
&#13;
&#13;
&#13;

答案 2 :(得分:2)

有了我,它没有做任何事情。

我只是写    新日期($('#html5dateinput')。val());

就是这样。我得到了正确的日期对象。我正在使用谷歌浏览器版本38,我在Ubuntu 14.04下的Firefox 33上进行了测试

答案 3 :(得分:1)

UTC

javascript Date对象始终在UTC时区解析<input type=date>的原始值!

new Date(input.value) // Date object, date interpreted as UTC but printed in the local TZ
Date.parse(input.value) // Unix time in ms, date interpreted as UTC

本地时区

如果<input type=date>的值应在本地时区中解释,则可以通过添加如下时间来强制使用它:

new Date(input.value+"T00:00") // Date object, date interpreted and printed in the local TZ
Date.parse(input.value+"T00:00") // Unix time in ms, date interpreted as local TZ

为什么?

强调我的

例如,“ 2011-10-10”(仅日期格式),“ 2011-10-10T14:48:00”(日期时间格式)或“ 2011-10-10T14:48:00.000+09:00”(日期时间格式,以毫秒为单位,时区)可以传递并进行解析。 缺少时区偏移时,仅日期形式被解释为UTC时间,而日期时间形式被解释为本地时间。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse#Description

答案 4 :(得分:0)

<强> Use valueAsNumber

var myDate = new Date(input.valueAsNumber);