当前日期两次之间的时间

时间:2013-01-14 22:21:12

标签: javascript date datetime

我正在尝试使用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

4 个答案:

答案 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正确解析日期字符串。
  • 使用ISO日期字符串: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中遇到的时间无效。 time1NaN,因此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}}