Firefox上的Javascript时间计算问题

时间:2017-04-11 06:55:52

标签: javascript date firefox

我在我的网络应用程序中遇到问题,我正在计算开始时间和结束时间差异,它适用于Chrome v.57,Firefox v.52。

它在Firefox v.45(CentOS 6.6)上失败了,我检查了CentOS 6.6 repo它是它上面的最新版本。

有人可以告诉我如何计算时间的差异,以便它适用于所有浏览器吗?

我在我的网络应用程序中使用bootstrap-datetimepicker,用户可以选择自己选择的时间。

var start_time = '2017-04-11 23:29:41 -07:00',
    end_time = '2017-04-10 23:29:41 -07:00',
    start_time_js =  start_time.split(' '),
    end_time_js =  start_time.split(' ');
start_time_js = new Date(start_time_js[0] + ' ' + start_time_js[1]);
end_time_js = new Date(end_time_js[0] + ' ' + end_time_js[1]);
elapsed_time = end_time_js.getTime() - start_time_js.getTime();

if(elapsed_time < 0) {
    console.log('Start time must be less then end time')
}

Firefox 45中调试模式的屏幕截图,请注意start_time_jsInvalid Date

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

由于您不能使用外部库,您必须自己解析输入,然后您可以使用new Date(year, month, date, hours, minutes, seconds, milliseconds);构造函数。

请注意,月份为0索引。

这是一份工作样本:

&#13;
&#13;
function getDateFromString(input){
  var split = input.split(' ');
  var datePart = split[0].split('-');
  var timePart = split[1].split(':');
  var dt = new Date(datePart[0], datePart[1]-1, datePart[2], timePart[0], timePart[1], timePart[2]);
  return dt;
}

var start_time = '2017-04-11 23:29:41 -07:00',
    end_time = '2017-04-10 23:29:41 -07:00';

var dtStart = getDateFromString(start_time);
var dtEnd = getDateFromString(end_time);

var elapsed_time = dtEnd.getTime() - dtStart.getTime();

if(elapsed_time < 0) {
  console.log('Start time must be less then end time')
}
&#13;
&#13;
&#13;

跨浏览器处理JavaScript日期的最佳方法之一是使用momentjs。在您的情况下,您可以使用moment parsingisBefore / isAfter来比较时刻对象。

您的代码可能如下所示:

&#13;
&#13;
var start_time = '2017-04-11 23:29:41 -07:00',
  end_time = '2017-04-10 23:29:41 -07:00',
  start_time_js =  start_time.split(' '),
  end_time_js =  end_time.split(' ');

var mStart = moment(start_time_js[0] + ' ' + start_time_js[1]);
var mEnd = moment(end_time_js[0] + ' ' + end_time_js[1]);

if(mEnd.isBefore(mStart)) {
  console.log('Start time must be less then end time')
}
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)