2017-04-11 40 views
0

我在計算開始時間和結束時間差的web應用程序中遇到問題,它適用於Chrome v.57,Firefox v.52。Firefox上的Javascript時間計算問題

它在Firefox v.45(CentOS 6.6)上失敗了,我檢查CentOS 6.6 repo,它是最新版本。

有人可以告訴我如何計算時間的差異,以便它可以在所有瀏覽器上工作?

我在我的web應用程序中使用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

+0

它爲我在Firefox 52在Windows 7.什麼是start_time_js.getTime()''的環境中的價值? – VincenzoC

+0

是的,它適用於Firefox 52,但問題出在Firefox 45上。 – n33rma

+0

你可以使用外部庫嗎? – VincenzoC

回答

1

由於您不能使用外部庫,您必須自行解析輸入,然後才能使用new Date(year, month, date, hours, minutes, seconds, milliseconds);構造函數。

請注意,月份爲0索引。

這裏工作示例:

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') 
 
}

一個以處理JavaScript的最好方法日期跨瀏覽器使用momentjs。在你的情況下,你可以使用moment parsingisBefore/isAfter來比較矩對象。

你的代碼可能是這樣的:

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') 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

+0

非常感謝,它的作用像一個魅力:) – n33rma