我正在尝试使用JavaScript计算当前日期两次之间的时间。还有其他类似的问题,但似乎没有一个问题可行,很少有很多我能找到的赞成。
我有以下内容,但在线路上失败:var diff = new Date(time1 - time2);
,在收到警报时总是给我一个invalid Date
,所以它显然是失败的。我无法理解为什么。
初始日期的格式为:hh:mm:输入字段中的ss。我正在使用jQuery。
$(函数(){
$('#goTime').click(function(){
var currentDate = new Date();
var dateString = (strpad(currentDate.getDate()) +'-'+ strpad(currentDate.getMonth()+1)+'-'+currentDate.getFullYear()+' '+ $('#starttime').val());
var time1 = new Date(dateString).getTime();
var time2 = new Date().getTime();
var diff = new Date(time1 - time2);
var hours = diff.getHours();
var minutes = diff.getMinutes();
var seconds = diff.getMinutes();
alert(hours + ':' + minutes + ':' + seconds);
});
});
function strpad(val){
return (!isNaN(val) && val.toString().length==1)?"0"+val:val;
}
dateString
等于:14-01-2013 23:00
答案 0 :(得分:3)
您有dateString
后面的字段。交换年和日的字段......
> new Date('14-01-2013 23:00')
Invalid Date
> new Date('2013-01-14 23:00')
Mon Jan 14 2013 23:00:00 GMT-0800 (PST)
答案 1 :(得分:0)
dd-MM-yyyy HH:mm
未被new Date()
识别为有效时间格式。你有几个选择:
dd/MM/yyyy HH:mm
正确解析日期字符串。yyyy-MM-dd HH:mm
也可以识别。Date
对象。对于第二个选项,由于您只关心时间,您可以自己拆分时间字符串并将其传递给Date.setHours(h, m, s)
:
var timeParts = $('#starttime').val().split(':', 2);
var time1 = new Date();
time1.setHours(timeParts[0], timeParts[1]);
答案 2 :(得分:0)
如果您尝试计算两个日期之间的时差,则无需创建新的日期对象即可。
var time1 = new Date(dateString).getTime();
var time2 = new Date().getTime();
var diff = time1 - time2;// number of milliseconds
var seconds = diff/1000;
var minutes = seconds/60;
var hours = minutes/60;
编辑:您还需要考虑到broofa的答案 确保您的日期字符串格式正确
getTime函数返回自1970年1月1日以来的毫秒数。因此,通过减去剩下的两个值,每个日期对象之间的毫秒数。如果要将该值传递给Date构造函数,则生成的日期对象将不是您所期望的。见getTime
答案 3 :(得分:0)
您在datestring
中遇到的时间无效。 time1
为NaN
,因此diff
将是var date = new Date();
var match = /^(\d+):(\d+):(\d+)$/.exec($('#starttime').val()); // enforcing format
if (!match)
return alert("Invalid input!"); // abort
date.setHours(parseInt(match[1], 10));
date.setMinutes(parseInt(match[2], 10));
date.setSeconds(parseInt(match[3], 10));
var diff = Date.now() - date;
。使用它可能更好:
{{1}}