ott.mjs

import ot from 'dayjs'
import utc from 'dayjs/plugin/utc.js'
import timezone from 'dayjs/plugin/timezone.js'


ot.extend(utc)
ot.extend(timezone)


let TZ = 'Asia/Taipei'


/**
 * 產生台北時區(Asia/Taipei)之dayjs時間物件
 *
 * 供estimKeys與w-trade-backtest之runStrategy等函數使用,使各處時間換算基準一致
 * 未給予input時回傳當下時間,給予input時以台北時區解析該時間
 *
 * @function
 * @param {String|Number|Date} [input=null] 輸入時間字串、時間數值或時間物件,未給予時代表當下時間,預設null
 * @returns {Object} 回傳台北時區之dayjs時間物件
 * @example
 *
 * console.log(ott('2020-01-01T00:00:00').format('YYYY-MM-DDTHH:mm:ssZ'))
 * // => '2020-01-01T00:00:00+08:00'
 *
 */
let ott = (input) => {
    if (input === undefined || input === null) {
        return ot().tz(TZ)
    }
    return ot.tz(input, TZ)
}


/**
 * 取得當下台北時間字串,格式'YYYY-MM-DDTHH:mm:ssZ'
 *
 * @function
 * @returns {String} 回傳當下台北時間字串
 * @example
 *
 * console.log(nowTpeStr())
 * // => '2026-08-04T22:08:31+08:00'
 *
 */
let nowTpeStr = () => ott().format('YYYY-MM-DDTHH:mm:ssZ')


/**
 * 取得當下台北時間字串,格式'YYYYMMDDHHmmss'
 *
 * @function
 * @returns {String} 回傳當下台北時間字串
 * @example
 *
 * console.log(nowTpeStrp())
 * // => '20260804220831'
 *
 */
let nowTpeStrp = () => ott().format('YYYYMMDDHHmmss')


export default ott
export { ott, nowTpeStr, nowTpeStrp }