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

cha*_*ez1 9 javascript html5 date input object

我正在尝试在focus.add_days函数中创建一个javascript日期对象,以便在元素中的给定日期添加一些日期.问题是javascript对象不期望字符串"Ymd"所以如何创建日期对象而不将字符串"Ymd"解析成片段,或者是唯一的方法?

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();
Run Code Online (Sandbox Code Playgroud)

acd*_*ior 10

用途valueAsDate:

valueAsDate
返回:Date

返回/设置元素的值,解释为日期,或者null是否无法进行转换.

演示:

<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>
Run Code Online (Sandbox Code Playgroud)


Rob*_*obG 8

如何在不将字符串"Ymd"解析为片段的情况下创建日期对象,还是唯一的方法?

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

// 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]);
}
Run Code Online (Sandbox Code Playgroud)

ES5指定了所有浏览器都应支持的ISO 8601格式,但不一致或所有正在使用的浏览器都不支持.


Mad*_*col 6

世界标准时间

javascript对象总是解析 UTC 时区Date的原始值!<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
Run Code Online (Sandbox Code Playgroud)

当地时区

如果 的值<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
Run Code Online (Sandbox Code Playgroud)

为什么?

强调我的

例如,可以传递“ 2011-10-10”(仅日期形式)、“ 2011-10-10T14:48:00”(日期时间形式)或“ ”(带有毫秒和时区的日期时间形式)并将被解析。当时区偏移量不存在时,仅日期形式将解释为 UTC 时间,而日期时间形式将解释为本地时间。2011-10-10T14:48:00.000+09:00

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