私のJavaScriptコードはChrome、IE、Firefoxで動作していますが、Safariに到達すると動作しません。問題を絞り込んだと思います。JavaScriptで「新しい日付」を作成すると、safariを除く他のすべてのブラウザが私の文字列を認識します。
HTML:
<form>
<input id="timeIn" value="1:00 AM"/>
<input id="dateIn" value="1/20/2012"/>
<input id="timeOut" value="2:00 AM"/>
<input id="dateOut" value="1/21/2012"/>
</form>
JavaScript:
function calcHours() {
// Build datetime objects and subtract
var timeIn = new Date($('#timeIn').val() + $('#dateIn').val());
if(!isValidDate(timeIn)) return -1;
var timeOut = new Date($('#timeOut').val() + $('#dateOut').val());
if(!isValidDate(timeOut)) return -1;
var hours = (timeOut - timeIn)/(1000*60*60);
return hours.toFixed(1);
}
function isValidDate(d) {
console.log(d);
if ( Object.prototype.toString.call(d) === "[object Date]" ) {
// it is a date
if ( isNaN( d.getTime() ) ) { // d.valueOf() could also work
// date is not valid
console.log("isn't valid");
return 0;
}
else {
// date is valid
console.log("is valid");
return 1;
}
}
else {
// not a date
console.log("isn't valid");
return 0;
}
}
var hours = calcHours();
console.log("Hours:", hours);
私はjsフィドルを作成しました:http://jsfiddle.net/mq72k/7/。クロームで開くと正常に動作します。Safariで開くと、同じ入力に対して無効な日付が表示され、まったく機能しません。また、文字列を少し変えたり、スペースを追加したり、順序を変えたりしてみました。
このクロスブラウザの互換性の問題を修正する方法を知っている人はいますか?