0

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

4 回答 4

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)
于 2013-01-14T22:31:31.333 回答
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]);
于 2013-01-14T22:37:47.597 回答
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

于 2013-01-14T22:40:42.173 回答
0

您的datestring. time1NaNdiff也会如此。使用这个可能会更好:

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;
于 2013-01-14T22:40:49.227 回答