getTimeRange.mjs

import ot from 'dayjs'
import istime from './istime.mjs'
import time2min from './time2min.mjs'


/**
 * 起訖時間合併顯示,時間單位皆為秒
 *
 * Unit Test: {@link https://github.com/yuda-lyu/wsemi/blob/master/test/getTimeRange.test.mjs Github}
 * @memberOf wsemi
 * @param {String} tstart 輸入開始秒時間字串,不含時區
 * @param {String} tend 輸入結束秒時間字串,不含時區,若不輸入則等同於開始時間字串
 * @returns {String} 回傳合併顯示時間字串
 * @example
 *
 * console.log(getTimeRange('2019-01-01T09:00:00'))
 * // => '2019-01-01T09:00 至 無'
 *
 * console.log(getTimeRange('2019-01-01T09:00:00', '2019-01-01T12:34:56'))
 * // => '2019-01-01T09:00 至 12:34'
 *
 * console.log(getTimeRange('2019-01-01T09:00:00', '2019-01-03T12:00:00'))
 * // => '2019-01-01T09:00 至 2019-01-03T12:00'
 *
 * console.log(getTimeRange('2019-01-01T19:00:00', '2019-01-01T12:00:00'))
 * // => '2019-01-01T19:00 至 12:00 (起始時間大於結束時間)'
 *
 * console.log(getTimeRange('2019-01-03T09:00:00', '2019-01-01T12:00:00'))
 * // => '2019-01-03T09:00 至 2019-01-01T12:00 (起始時間大於結束時間)'
 *
 */
function getTimeRange(tstart, tend) {
    //可再支援輸入TZ時間

    //check
    if (!istime(tstart)) {
        return '無起始時間'
    }

    //set tend
    if (tend === undefined) {
        tend = tstart //若無tend則設定為起始時間
    }

    //check
    if (!istime(tend)) {
        return '結束時間格式錯誤'
    }

    //m1, m2
    let m1 = ot(tstart, 'YYYY-MM-DDTHH:mm:ss')
    let m2 = ot(tend, 'YYYY-MM-DDTHH:mm:ss')

    //day
    let ctstart = m1.format('YYYY-MM-DD')
    let ctend = m2.format('YYYY-MM-DD')

    if (ctstart === ctend) { //同天
        let h = m2.format('HH:mm')

        if (tstart === tend) {
            return time2min(tstart) + ' 至 ' + '無'
        }
        else if (tstart < tend) {
            return time2min(tstart) + ' 至 ' + h
        }
        else if (tstart > tend) {
            return time2min(tstart) + ' 至 ' + h + ' (起始時間大於結束時間)'
        }

    }
    else if (ctstart < ctend) {

        return time2min(tstart) + ' 至 ' + time2min(tend)

    }
    else if (ctstart > ctend) {

        return time2min(tstart) + ' 至 ' + time2min(tend) + ' (起始時間大於結束時間)'

    }

    return ''
}


export default getTimeRange