字符串到日期的转换 returns NaN
string to date conversion returns NaN
我正在使用 jquery 日期时间选择器插件,并且有三个文本框,即开始日期、结束日期、差异。插件完美运行,开始日期字符串 (dd/MM/yyyy HH:mm) 格式正确转换,但结束日期字符串未转换为 Date 对象,它 returns 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:52alert('end:-'+end1);
结束:-13/11/2017 20:54
alert(sDate);
给出 1513005720000
but alert(eDate);
给出 NaN
Date.parse() 在浏览器中有一些古怪的支持。就像在 FF 中在 Chrome returns 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 进行计算。希望这可以帮助。
此意外行为可能是由于您尝试解析的日期字符串格式所致。如果您仔细查看 MDN dateString 解释,您可以看到
A string representing an RFC2822 or (a variant of) ISO 8601 date (other formats may be used, but results may be unexpected).
另请参阅 return 值解释
If the argument doesn't represent a valid date, NaN is returned.
因此,我尝试了以下操作并得到了 1513022040000
结果。希望对你有帮助
var dateString = new Date('12/11/2017 20:54');
var result = Date.parse(dateString);
console.log(result)
经过一些研究并受到 plain javascript
的骚扰后,我切换到 moment.js
瞧!我得到了有效日期差异的结果。我刚刚将 javascript 代码替换为:-
var d1 = moment(startDateString, "DD-MM-YYYY HH:mm");
var d2 = moment(endDateString, "DD-MM-YYYY HH:mm");
这很顺利。
我正在使用 jquery 日期时间选择器插件,并且有三个文本框,即开始日期、结束日期、差异。插件完美运行,开始日期字符串 (dd/MM/yyyy HH:mm) 格式正确转换,但结束日期字符串未转换为 Date 对象,它 returns 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:52alert('end:-'+end1);
结束:-13/11/2017 20:54
alert(sDate);
给出 1513005720000
but alert(eDate);
给出 NaN
Date.parse() 在浏览器中有一些古怪的支持。就像在 FF 中在 Chrome returns 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 进行计算。希望这可以帮助。
此意外行为可能是由于您尝试解析的日期字符串格式所致。如果您仔细查看 MDN dateString 解释,您可以看到
A string representing an RFC2822 or (a variant of) ISO 8601 date (other formats may be used, but results may be unexpected).
另请参阅 return 值解释
If the argument doesn't represent a valid date, NaN is returned.
因此,我尝试了以下操作并得到了 1513022040000
结果。希望对你有帮助
var dateString = new Date('12/11/2017 20:54');
var result = Date.parse(dateString);
console.log(result)
经过一些研究并受到 plain javascript
的骚扰后,我切换到 moment.js
瞧!我得到了有效日期差异的结果。我刚刚将 javascript 代码替换为:-
var d1 = moment(startDateString, "DD-MM-YYYY HH:mm");
var d2 = moment(endDateString, "DD-MM-YYYY HH:mm");
这很顺利。