ich dies mit I Vorwort werde nicht viel Erfahrung Javascript. Ich habe versucht, einige clientseitige Überprüfungen beim Senden von Formularen durchzuführen, um zu verhindern, dass ein Benutzer einen Bericht ausführt, wenn sie einen Datumsbereich größer als ein Jahr eingeben, aber andernfalls lassen Sie ihn ausführen. Hier ist die Funktion
function revDays() {
var _MS_PER_Day=24*60*60*1000;
var startDate = new Date(document.getElementById('FROM').value);
var sy = startDate.getUTCFullYear();
var sm = startDate.getUTCMonth();
var sd = startDate.getUTCDate();
var endDate = new Date(document.getElementById('TO').value);
var ey = endDate.getUTCFullYear();
var em = endDate.getUTCMonth();
var ed = endDate.getUTCDate();
var utc1 = Date.UTC(sy, sm, sd);
var utc2 = Date.UTC(ey, em, ed);
//alert("utc1 variable is " + utc1);
//alert("utc2 variable is " + utc2);
var dayDiff = Math.floor(utc2 - utc1);
//alert("dayDiff var is " + dayDiff);
var diff = Math.floor((utc2 - utc1)/_MS_PER_Day);
//alert("diff var is " + diff);
if (diff > 365) {
alert("This report cannot be run for more than 365 days at a time. Please adjust your date range and try again");
return false;
}
else {
return true;
}
};
Ich nenne diese Funktion auf Formular
<form name="Report" method="post" action="report.php" target="_blank" onsubmit="return revDays(this)">
einreichen Dies funktioniert wie erwartet in Chrome, IE und Safari, aber Firefox gibt NaN
auf einem der Vars, sobald Sie das Hinzufügen starten in die Date.UTC-Funktionen. Sie können meine kommentiert out Warnungen sehen, wo ich in anderen Browsern verglichen, die Date.UTC richtig die Zeichenfolge in einem Date-Objekt in MS konvertiert, aber FireFox gibt einfach NaN
trotz ihrer Dokumentation besagt, dass sie Date.UTC
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC
unterstützenKann mir jemand in die richtige Richtung zeigen, was ich vermisse? Die ähnlichen Fragen, die ich in SO fand, waren über den Vergleich zweier Daten, und in diesem Fall muss ich die Anzahl der Tage zwischen zwei Werten erhalten, und nicht ein einfacher Boolescher Wert ist gleich zu überprüfen.
Was sind die Werte dieser Elemente "FROM" und "TO"? – Adrian
Ihr Problem ist hier: 'new Date (document.getElementById ('FROM'). Value);' Strings nicht mit dem Date-Konstruktor (oder Date.parse, sie sind äquivalent zum Parsen) zu analysieren, da es weitgehend implementierungsabhängig ist (wie du hast es entdeckt). Verwenden Sie eine kleine Parsing-Funktion (3 oder 4 Zeilen), wenn Sie nur ein Format oder eine Bibliothek anderweitig unterstützen müssen. – RobG
PPS Erstellen eines Datums, dann verwenden seine UTC-Werte mit Date.UTC einfach einen Zeitwert für einen identischen Zeitpunkt (d. H. Es ist sinnlos). ;-) – RobG