時間格式化(將 "15:3" 轉成 "15:03")

你可以創建一個簡單的函數來處理這個格式化。核心思想是將小時和分鐘拆開,然後使用 padStart() 方法來補零。

 /**
 * 將時間字串 (hh:m 或 h:mm) 格式化為 hh:mm。
 * 例如:"15:3" -> "15:03", "5:8" -> "05:08"
 *
 * @param {string} timeString 原始的時間字串,格式為 "h:m", "hh:m", "h:mm", "hh:mm"。
 * @returns {string} 格式化後的 hh:mm 字串。如果輸入格式無效,可能回傳空字串或原字串。
 */
function formatTime(timeString) {
    // 檢查輸入是否為字串且包含冒號
    if (typeof timeString !== 'string' || !timeString.includes(':')) {
        console.error("無效的時間字串格式:", timeString);
        return timeString; // 或拋出錯誤,或回傳空字串
    }

    const [hoursStr, minutesStr] = timeString.split(':');

    // 將字串轉換為數字,並使用 padStart 補零
    const formattedHours = String(parseInt(hoursStr, 10)).padStart(2, '0');
    const formattedMinutes = String(parseInt(minutesStr, 10)).padStart(2, '0');

    // 檢查轉換後的數字是否有效
    if (isNaN(parseInt(formattedHours)) || isNaN(parseInt(formattedMinutes))) {
        console.error("時間字串解析失敗:", timeString);
        return timeString;
    }

    return `${formattedHours}:${formattedMinutes}`;
}

// 測試
console.log(formatTime("15:3"));  // 輸出 "15:03"
console.log(formatTime("5:8"));   // 輸出 "05:08"
console.log(formatTime("10:15")); // 輸出 "10:15"
console.log(formatTime("7:0"));   // 輸出 "07:00"
console.log(formatTime("23:59")); // 輸出 "23:59"
console.log(formatTime("invalid")); // 輸出 "無效的時間字串格式: invalid"
console.log(formatTime("1:2:3")); // 輸出 "時間字串解析失敗: 1:2:3" (因為split只取前兩個)
  

解釋:

  1. timeString.split(':'): 將輸入的字串 timeString 依據冒號 : 分割成一個陣列,例如 "15:3" 會變成 ["15", "3"]

  2. parseInt(hoursStr, 10) / parseInt(minutesStr, 10): 將分割後的字串(例如 "15""3")轉換為整數。10 是指定基數為 10,確保正確解析。

  3. String(...): 確保數字轉換回字串,因為 padStart 是字串的方法。

  4. .padStart(2, '0'): 這是關鍵方法。

    • 2 表示最終字串的最小長度應該是 2。

    • '0' 表示如果字串長度不足 2,則在左側用 '0' 填充。

    • 例如,"3".padStart(2, '0') 會變成 "03",而 "15".padStart(2, '0') 仍然是 "15"

  5. return

            formattedHours:{formattedHours}:
          
    {formattedMinutes}``
    : 使用模板字面量將格式化後的小時和分鐘組合回 hh:mm 格式。


留言

這個網誌中的熱門文章

Offscreen Canvas

外部網頁新增 Google 日曆行程(URL模板)

計算 Canvas 文字最大字體