const moment = require('moment-timezone');
import * as dayjs from "dayjs";
import { logger } from "mslib";

/**
 * 时间时区转化功能
 * @date 2023-05-25 16:33:28
 * @author 郁忠彪
 */
class TimeZoneConvertService {



    /**
        * 指定时间时间按照时区偏移量转本地时间
        * @param time YYYY-MM-DD HH:mm:ss zone 时区偏移量，全球分24个时区，东12区和西12区， 西区为+如西1区Etc/GMT+1 Etc/GMT-8东八区 
        * return YYYY-MM-DD HH:mm:ss
        */
    timeConByZone(time: string, zone: string) {
        try {
            return moment(time).tz(zone).format('YYYY-MM-DD HH:mm:ss')
        } catch (e) {
            logger.info(`时区转化异常：` + e)
            return ''
        }
    }

    /**
       * 当前时间按照时区偏移量转本地时间
       * @param  zone 时区偏移量，全球分24个时区，东12区和西12区， 西区为+如西1区Etc/GMT+1 Etc/GMT-8东八区 
       * return YYYY-MM-DD HH:mm:ss
       */
    nowConByZone(zone: string) {
        try {
            return moment().tz(zone).format('YYYY-MM-DD HH:mm:ss')
        } catch (e) {
            logger.info(`时区转化异常：` + e)
            return ''
        }
    }

    /**
       * 时间戳按照时区偏移量转本地时间
       * @param timeStamp 时间戳1685002166000毫秒  zone 时区偏移量，全球分24个时区，东12区和西12区， 西区为+如西1区Etc/GMT+1 Etc/GMT-8东八区 
       * return YYYY-MM-DD HH:mm:ss
       */
    timeStampConByZone(timeStamp: number, zone: string) {
        try {

            return moment(dayjs(timeStamp).format('YYYY-MM-DD HH:mm:ss')).tz(zone).format('YYYY-MM-DD HH:mm:ss')
        } catch (e) {
            logger.info(`时区转化异常：` + e)
            return ''
        }
    }
    /**
          * 获取时区时间戳
          * @param time YYYY-MM-DD HH:mm:ss   zone 时区偏移量，全球分24个时区，东12区和西12区， 西区为+如西1区Etc/GMT+1 Etc/GMT-8东八区 
          * return 返回10位时间戳(秒)-如果传入date则返回date对应的时间戳
          */
    unix(time: string, zone: string) {
        try {
            //  时区转化
            time = this.timeConByZone(time, zone)
            return moment(time).unix()
        } catch (e) {
            logger.info(`时区转化异常：` + e)
            return ''
        }

    }

    /**
             * 获取时区时间戳
             * @param time YYYY-MM-DD HH:mm:ss   zone 时区偏移量，全球分24个时区，东12区和西12区， 西区为+如西1区Etc/GMT+1 Etc/GMT-8东八区 
             * return 返回13位时间戳(毫秒)-如果传入date则返回date对应的时间戳
             */
    timestamp(time: string, zone: string) {
        try {
            //  时区转化
            time = this.timeConByZone(time, zone)
             return moment(time).valueOf()
        } catch (e) {
            logger.info(`时区转化异常：` + e)
            return ''
        }
    }


}

export { TimeZoneConvertService }