我試圖編寫一個函數,它需要一個'X:XX PM'形式的字符串,並將其更改爲24HR時間字符串,而不使用AM或PM。Javascript substr()不一致
這意味着:
'12:00 AM」變爲'00:00'
'上午03時半' 變爲'03:30'
'4:00 PM' 變'16:00'
'12:30 PM」變成'12:30'
等。
我使用JavaScript的substr()函數,它似乎工作不一致。下面的代碼:
function unFormatTime(timeString) {
console.log("length: " + timeString.length);
console.log("string passed in: " + timeString);
var hour = 0;
var minute = '';
var amOrPm = '';
if (length == 7) {
hour = parseInt(timeString.substr(0, 1));
minute = timeString.substr(2, 2);
amOrPm = timeString.substr(5, 2);
} else {
hour = parseInt(timeString.substr(0, 2));
minute = timeString.substr(3, 2);
amOrPm = timeString.substr(6, 2);
}
for (var i = 0; i < timeString.length; i++) {
console.log(i + ", 1 " + "'" + timeString.substr(i, 1) + "'");
console.log(i + ", 2 " + "'" + timeString.substr(i, 2) + "'");
}
console.log("unparsed: " + hour + " " + "'" + minute + "'" + " " + "'" + amOrPm + "'");
if (amOrPm == "PM") {
if (hour != 12) {
hour += 12;
}
} else {
if (hour == 12) {
hour -= 12;
}
}
if (hour < 10) {
hour = '0' + hour;
}
console.log("parsed: " + hour + " " + minute + " " + "'" + amOrPm + "'");
var newString = hour + ':' + minute;
console.log(newString);
return newString;
}
這個循環是存在的,因爲SUBSTR正在靠不住的。當功能被賦予「4:00」,則循環將打印
0, 1 '4'
2, 2 '00'
5, 2 'AM'
這些被分配到小時,分鐘和AM或PM匹配的字符串時字符串的長度爲7。然而,當我打印的實際變量,我得到:
unparsed: 4 '0 ' 'M'
因此,分鐘和amOrPm值是不是設置正確。我確信我只是在某個地方有一個錯字,但現在看起來像是Javascript中的某種錯誤,它讓我發瘋。
不一定與您的問題相關,但是:http://blog.codinghorror。com/the-first-rule-of-programming-its-always-your-fault/:) – sirrocco
有沒有理由不嘗試使用Date API,然後進行某種日期解析? http://momentjs.com/將是一個很好的資源。 – jusopi
沒有一個很好的理由,如果我不能弄清楚這一點,我會研究一下。我從substr開始,因爲我正在做的事很簡單,我知道如何使用它。現在更多的是理解爲什麼會發生這種情況。 – banjo78910