我正在使用jquery日期时间选择器插件,并有三个文本框即,startdate,enddate,difference。插件工作正常,startdate字符串(dd / MM / yyyy HH:mm)格式转换正确但enddate字符串不会转换为Date对象,它返回NaN。谁能帮我? 这是我的代码: -
<script type="text/javascript">
$(document).ready(function () {
$('#<%= txtEndDate.ClientID %>').bootstrapMaterialDatePicker
({
weekStart: 0, format: 'DD/MM/YYYY HH:mm', shortTime: true
});
$('#<%= txtStartDate.ClientID %>').bootstrapMaterialDatePicker
({
weekStart: 0, format: 'DD/MM/YYYY HH:mm', shortTime: true
}).on('change', function (e, date) {
$('#<%= txtEndDate.ClientID %>').bootstrapMaterialDatePicker('setMinDate', date);
});
$('.mb').change(function () {
var start = $('#<%= txtStartDate.ClientID %>').val();
alert('start:-'+start);
var end1 = $('#<%= txtEndDate.ClientID %>').val();
alert('end:-'+end1);
if (start != "" && end1 != "") {
var eDate = Date.parse(end1);
var sDate = Date.parse(start);
alert(sDate);
alert(eDate);// gives NaN
var diff = Math.abs(eDate - sDate);
alert(diff);
// get total seconds between the times
var delta = diff / 1000;
// calculate (and subtract) whole days
var days = Math.floor(delta / 86400);
delta -= days * 86400;
// calculate (and subtract) whole hours
var hours = Math.floor(delta / 3600) % 24;
delta -= hours * 3600;
// calculate (and subtract) whole minutes
var minutes = Math.floor(delta / 60) % 60;
delta -= minutes * 60;
// what's left is seconds
var seconds = delta % 60;
$('#<%= txtDifference.ClientID %>').val(parseInt(days) + ":" + parseInt(hours) + ":" + parseInt(minutes) + ":" + parseInt(seconds));
}
})
});
</script>
alert('start:-'+start);
开始:-12/11/2017 20:52 alert('end:-'+end1);
结束:-13/11/2017 20:54
alert(sDate);
给出1513005720000
but alert(eDate);
给出了NaN
答案 0 :(得分:1)
经过一些研究并受到plain javascript
的骚扰,我转而moment.js
瞧!我得到了有效日期差异的结果。我刚用: -
var d1 = moment(startDateString, "DD-MM-YYYY HH:mm");
var d2 = moment(endDateString, "DD-MM-YYYY HH:mm");
这很顺利。
答案 1 :(得分:0)
Date.parse()在浏览器中有一些奇特的支持。就像在Chrome上解析的一些字符串一样,在FF中返回NaN。
因此,我建议编写一个实用程序函数,用您从正在使用的字符串格式组成日期。
这是一个基于正则表达式的片段,用于从字符串中提取dd,mm和yyyy并将其组合为Date对象。
function getTimeFromString (formattedString) {
var a = formattedString.match(/(\d{2})\/(\d{2})\/(\d{4})\s(\d{2}):(\d{2})/)
var d = new Date()
d.setDate(a[1]), d.setMonth[a[2] - 1], d.setYear(a[3]), d.setHours(a[4]), d.setMinutes(a[5])
return d.getTime()
}
并使用getTimeFromString进行计算。希望这可以帮助。
答案 2 :(得分:0)
这种意外行为可能是由于您尝试解析的日期字符串格式造成的。如果仔细查看MDN dateString 说明,可以看到
表示RFC2822或ISO 8601日期(的变体)的字符串(可以使用其他格式,但结果可能是意外的)。
另请参阅解释的返回值
如果参数不代表有效日期,则返回NaN。
所以,我尝试过关注并获得1513022040000
作为结果。希望它有所帮助
var dateString = new Date('12/11/2017 20:54');
var result = Date.parse(dateString);
console.log(result)