2017-04-11 2 views
0

Ich habe das Problem in meiner Web-Anwendung, wo ich Anfangs- und Endzeit Differenz berechnen, funktioniert es auf Chrome V.57, Firefox V.52.Javascript Zeit Berechnung Problem auf Firefox

Es funktioniert nicht auf Firefox v.45 (CentOS 6.6) und ich überprüfe das CentOS 6.6 Repo es ist die neueste Version, die darauf verfügbar ist.

Kann mir bitte jemand sagen, wie man den Unterschied der Zeit berechnet, so dass es auf allen Browsern funktioniert?

Ich benutze bootstrap-datetimepicker in meiner Web-App, wo Benutzer die Zeit ihrer Wahl auswählen.

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

Screenshot von Debug-Modus in Firefox 45, beachten, dass start_time_js sagt Invalid Date.

enter image description here

enter image description here

+0

Es funktioniert für mich auf Firefox 52 auf Windows 7. Was ist der Wert von 'start_time_js.getTime ist()' in Ihrer Umgebung ? – VincenzoC

+0

Ja, es funktioniert auf Firefox 52, aber das Problem ist auf Firefox 45 wie in Frage erwähnt. – n33rma

+0

Können Sie externe Bibliotheken verwenden? – VincenzoC

Antwort

1

Da Sie keine externen Bibliotheken verwenden können, müssen Sie die Eingabe selbst analysieren und dann können Sie new Date(year, month, date, hours, minutes, seconds, milliseconds); Konstruktor verwenden.

Beachten Sie, dass Monate 0 indiziert sind.

hier ein funktionstüchtiges Beispiel:

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

Eines der besten Art und Weise zu handhaben JavaScript frei Cross-Browser verwendet momentjs. In Ihrem Fall können Sie moment parsing und isBefore/isAfter verwenden, um Momentobjekte zu vergleichen.

Ihr Code könnte wie folgt sein:

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

Vielen Dank, es funktioniert wie ein Charme :) – n33rma