js - 时间转换

2021-10-26  本文已影响0人  梁庄十年

1. 本地时间(日期或者毫秒值)转换成UTC时间

 localTimeToUTC(date) {
      let UTC_time = '';
      if(Object.prototype.toString.call(date) === '[object String]') {
        const formated_UTC_time = this.formatedUTCTime(date); // 格式化UTC时间;
        UTC_time = new Date(formated_UTC_time).toISOString();
      } else {
        UTC_time = new Date(date).toISOString();
      }
      return UTC_time;
    },

参数说明:
date: string | number;
参数示例: '2021-10-26 22:49:00' 或者 1635259752769(时间戳);
返回值: string;
返回值示例: 2021-10-26T14:51:03.241Z;

2. UTC时间转本地时间

 UTCToLocalTime(UTC_time, format) {
      const date = new Date(UTC_time);
      const year = date.getFullYear();
      const ori_month = date.getMonth() + 1;
      const month = ori_month < 10 ? `0${ori_month}` :  ori_month;
      const ori_day = date.getDay();
      const day = ori_day < 10 ? `0${ori_day}` : ori_day;

      const ori_hour = date.getHours();
      const hour = ori_hour < 10 ? `0${ori_hour}` : ori_hour;
      const ori_minute = date.getMinutes();
      const minute = ori_minute < 10 ? `0${ori_minute}` : ori_minute;
      const ori_second = date.getSeconds();
      const second = ori_second < 10 ? `0${ori_second}` : ori_second;
      if(format) {
       return format.replace('YYYY', year)
          .replace('MM', month)
          .replace('DD', day)
          .replace('hh', hour)
          .replace('mm', minute)
          .replace('ss', second);
      } else {
        return `${year}-${month}-${day} ${hour}:${minute}:${second}`
      }
    },

参数说明:
UTC_time: string;
format: string
参数示例:
UTC_time: 2021-10-26T14:59:10Z ;
format: 'YYYY-MM-DD hh:mm:ss' 或 'YYYY-MM-DD' 或 'YYYY-MM-DD hh' 或 'YYYY-MM-DD hh:mm'
返回值: string;
返回值示例: 2021-10-26 14:51:03;

3. 日期转毫秒值

    getTimeStamp(dateParams) {
      const formateDate = dateParams.replace(new RegExp('-','gm'), '/');
      const millisecond = new Date(formateDate).getTime();
      return millisecond;
    },

参数说明:
dateParams: string;
参数示例:
dateParams: 2021-10-26 14:59:10.08 或 2021-10-26 14:59 或 2021-10-26 ;
返回值: number;
返回值示例: 1635433226756(number)

4. 格式化UTC时间

 formatedUTCTime(utc_time, customSplitMark) {
      const T_pos = utc_time.indexOf('T');
      const Z_pos = customSplitPos ? utc_time.indexOf(customSplitMark) :  utc_time.indexOf('Z');
      const year_month_day = utc_time.substr(0, T_pos);
      const hour_minute_second = utc_time.substr(T_pos + 1, Z_pos - T_pos - 1);
      return `${year_month_day} ${hour_minute_second}`;
    }

参数说明:
utc_time: string;
customSplitMark: string
参数示例:
utc_time: 2021-10-26T14:59:10.087Z 或 2021-10-26T14:59:10Z ;
customSplitMark: '.'
返回值: string;
返回值示例: 2021-10-26 14:51:03;

5. 过于日期踩过的坑

// 如果是东八区, 获取到的是早上8点的毫秒值;
new Date('yyyy-MM-dd').getTime();  

// 如果是东八区, 获取到的是0点的毫秒值,此处和前一种的区别在于最后加了一个空格;
new Date('yyyy-MM-dd ').getTime(); 

new Date('yyyy-MM-dd hh:mm:ss').getTime(); // 如果是东八区, 获取的是0的毫秒值;

new Date('yyyy-MM-dd 24:00:00').getTime(); // 获取当天24点的毫秒值;
上一篇 下一篇

猜你喜欢

热点阅读