/**
 * @文件格式-time.js
 * @module 格式化時間
 */

/**
 * 將秒格式化為時間字符串,H:MM:SS 或 M:SS。提供指南(在
 * seconds) 將強制使用多個前導零來覆蓋
 * 指導。
 *
 * @私人的
 * @param {number} 秒
 * 轉成字符串的秒數
 *
 * @param {number} 指南
 * 數字(以秒為單位)來建模之後的字符串
 *
 * @return {字符串}
 * 時間格式化為 H:毫米:SS 或 M:SS
 */
const defaultImplementation = function(seconds, guide) {
  秒 = 秒 <  0?0:秒;
  讓 s = Math.floor(seconds % 60);
  讓 m = Math.floor(秒 / 60 % 60);
  讓 h = Math.floor(seconds / 3600);
  const gm = Math.floor(指南 / 60 % 60);
  const gh = Math.floor(guide / 3600);

  // 處理無效時間
  如果(isNaN(秒)||秒===無限){
    // '-' 對於所有關係運算符(例如 <、>=)都是假的,所以這個設置
    // 將添加指南指定的最少字段數
    h = m = s = '-';
  }

  // 檢查我們是否需要顯示小時數
  h = (H > 0 || 重 > 0)?h + ':':「;

  // 如果顯示小時數,我們可能需要添加一個前導零。
  // 始終至少顯示一位數的分鐘。
  米 = (((h || 克 > = 10) & 米 <  10)?'0 '+ 米:米)+':';

  // 檢查秒數是否需要前導零
  秒 = (S  <  10)?'0 '+ S:S;

  返回 h + m + s;
};

// 指向當前實現的內部指針。
讓實現=默認實現;

/**
 * 用自定義實現替換默認的 formatTime 實現。
 *
 * @param {函數} 自定義實現
 * 將用於代替默認格式時間的函數
 * 執行。將收到以秒為單位的當前時間和
 * 指南(以秒為單位)作為參數。
 */
導出函數 setFormatTime(customImplementation) {
  實現=自定義實現;
}

/**
 * 將 formatTime 重置為默認實現。
 */
導出函數 resetFormatTime() {
  實現=默認實現;
}

/**
 * 委託給默認時間格式化函數或自定義
 * 通過 `setFormatTime` 提供的函數。
 *
 * 將秒格式化為時間字符串(H:MM:SS 或 M:SS)。提供一個
 * 指南(以秒為單位)將強制使用多個前導零來覆蓋
 * 指南的長度。
 *
 * @靜止的
 * @example 格式化時間 (125, 600)
 * @param {number} 秒
 * 轉成字符串的秒數
 *
 * @param {number} 指南
 * 數字(以秒為單位)來建模之後的字符串
 *
 * @return {字符串}
 * 時間格式化為 H:毫米:SS 或 M:SS
 */
功能格式時間(秒,指南=秒){
  返回實現(秒,指南);
}

導出默認格式時間;