2014-05-13 35 views
5

我试图在focus.add_days函数中创建一个javascript日期对象,以在元素中给定的日期添加一些日子。 问题是javascript对象不期望字符串“Y-m-d”,那么如何在不将字符串“Y-m-d”分解成块的情况下创建日期对象,还是唯一的方法?JavaScript的日期对象来自<input type = date>

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(); 
+0

看看moment.js – hgoebl

回答

8

我怎么可以创建日期对象,而不解析字符串“Y-M-d”成片,或者是唯一的出路?

虽然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应该支持所有浏览器都支持,但不一致支持或所有浏览器都不支持。

+0

感谢,所以我因子评分我将要拆分的文本,我只是想知道,如果有更好的办法解决这个问题。 – chagovelez1

+1

我不能相信这是正确的答案。为什么选择HTML5? – cgatian

+0

@cgatian - [*“HTML5”是一个buzword *](https://html.spec.whatwg.org/multipage/introduction.html#is-this-html5?),它只是HTML。 ;-)由内置Date构造函数解析的ISO 8601格式日期将被视为UTC,因此格林威治以西的用户可以看到前一天的日期。但HTML希望他们被视为“本地”......去图。 – RobG

2

与我一起工作,没有做任何事情。

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

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

+0

这有非常不一致的结果。在Chrome上测试的时候,'new Date(“2017-10-19”)'在GMT中发出正确的日期,而'new Date(“2017-10-9”)'给出了我自己的时区中的日期。 – Imme

1

使用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>