js处理时间戳转成日期格式

获取指定的时间格式

function GformatTime(time,format){
let timeIsObject = false;
        // 如果两个参数都为空则,全部采用默认
        if(typeof _format === 'undefined' && typeof _time === 'undefined'){
            timeIsObject = true;
            _format = 'Y-m-d H:i:s';
            _time = new Date();
        }
        else if(!_format){
            _format = 'Y-m-d H:i:s';
        }
        else if(_format && typeof _time === 'undefined'){
            // // 判断下_str 是不是位于10至12位的纯阿拉伯数字,如果是转为毫秒时间戳
            // if(/^[1-9]\d{9,11}$/.test(_format)){
            //     _format*=1000;
            // }
            if(new Date(_format).toString() === 'Invalid Date'){
                timeIsObject = true;
               _time = new Date();
            }else{
                 _time = _format;
                _format = 'Y-m-d H:i:s';
            }
        }
        if(!timeIsObject){
            try{
                //  // 判断下_str 是不是位于10至12位的纯阿拉伯数字,如果是转为毫秒时间戳
                // if(/^[1-9]\d{9,11}$/.test(_time)){
                //     _time*=1000;
                // }
                _time = new Date(_time);
                if(_time.toString() === 'Invalid Date' || _time.toLocaleDateString() === '1970/1/1'){
                    _time = new Date(null);
                }
            } catch(error) {
                _time = new Date();
            }
        }
        // 得到"Wed Apr 07 2021" => ['Wed','Apr','07','2021']
        let dateString = _time.toDateString().split(' ');
        // 补位函数
        let strPad = function(v,len = 2){
            let vLen = v.toString().length;
            if(vLen < len){
                for(let i = len-vLen; i > 0; i--){
                    v = '0'+v;
                }
            }
            return v;
        }
        let result = [],temp;
        let len = _format.length;
        for(let ii = 0; ii < len; ii++){
            if(_format[ii] === '\\'){
                result.push(_format[++ii]);
                continue;
            }
            switch(_format[ii]){
                case 'd':
                    // 一个月中的第几天(从 01 到 31)
                    result.push(strPad(_time.getDate()));
                    break;
                case 'D':
                    // 星期几的文本表示(用三个字母表示)
                    result.push(dateString[0]);
                    break;
                case 'j':
                    // 一个月中的第几天,不带前导零(1 到 31)
                    result.push(_time.getDate());
                    break;
                // case 'l':
                //     // ('L' 的小写形式)- 星期几的完整的文本表示
                //     break;
                case 'N':
                    // 星期几的 ISO-8601 数字格式表示(1表示Monday[星期一],7表示Sunday[星期日])
                    result.push(_time.getDay()+1);
                    break;
                // case 'S':
                //     // 一个月中的第几天的英语序数后缀(2 个字符:st、nd、rd 或 th。与 j 搭配使用)
                //     break;
                case 'w':
                    // 星期几的数字表示(0 表示 Sunday[星期日],6 表示 Saturday[星期六])
                    result.push(_time.getDay());
                    break;
                case 'z':
                    // 一年中的第几天(从 0 到 365)
                    result.push(Math.ceil((new Date(_time.toDateString()) - new Date(_time.getFullYear().toString()))/(24*60*60*1000)));
                    break;
                case 'W':
                    // 用 ISO-8601 数字格式表示一年中的第几个星期(第几周)
                    result.push(Math.ceil(Math.ceil((new Date(_time.toDateString()) - new Date(_time.getFullYear().toString()))/(24*60*60*1000))/7));
                    break;
                // case 'F':
                //     // 月份的完整的文本表示(January[一月份] 到 December[十二月份])
                //     break;
                case 'm':
                    // 月份的数字表示(从 01 到 12)
                    result.push(strPad(_time.getMonth()+1));
                    break;
                case 'M':
                    // 月份的短文本表示(用三个字母表示)
                    result.push(dateString[1]);
                    break;
                case 'n':
                    // 月份的数字表示,不带前导零(1 到 12)
                    result.push(strPad(_time.getMonth()+1));
                    break;
                case 't':
                    // 给定月份中包含的天数
                    temp = new Date(_time);// 防止改变原时间对象
                    temp.setMonth(_time.getMonth()+1);
                    temp.setDate(0);// 设置为0,date会自动切为上一个月的最后一天
                    result.push(temp.getDate());
                    break;
                case 'L':
                    // 是否是闰年(如果是闰年则为 1,否则为 0)
                    temp = _time.getFullYear();
                    if(temp%4 == 0 && temp%100 != 0 || temp%400 == 0){
                        result.push(1);
                    }else{
                        result.push(0);
                    }
                    break;
                case 'o':
                    // ISO-8601 标准下的年份数字
                case 'Y':
                    // 年份的四位数表示
                    result.push(_time.getFullYear());
                    break;
                case 'y':
                    // 年份的两位数表示
                    result.push(_time.getFullYear().toString().substr(2,2));
                    break;
                case 'a':
                    //小写形式表示:am 或 pm
                    temp = _time.getHours();
                    result.push(temp<12?'am':'pm');
                    break;
                case 'A':
                    // 大写形式表示:AM 或 PM
                    temp = _time.getHours();
                    result.push(temp<12?'AM':'PM');
                    break;
                // case 'B':
                //     // Swatch Internet Time(000 到 999)
                //     break;
                case 'g':
                    // 12 小时制,不带前导零(1 到 12)
                    temp = _time.getHours();
                    result.push(temp>12?temp-12:temp);
                    break;
                case 'G':
                    // 24 小时制,不带前导零(0 到 23)
                    temp = _time.getHours();
                    result.push(temp);
                    break;
                case 'h':
                    // 12 小时制,带前导零(01 到 12)
                    temp = _time.getHours();
                    temp = temp>12?temp-12:temp;
                    result.push(strPad(temp));
                    break;
                case 'H':
                    // 24 小时制,带前导零(00 到 23)
                    temp = _time.getHours();
                    result.push(strPad(temp));
                    break;
                case 'i':
                    // 分,带前导零(00 到 59)
                    result.push(strPad(_time.getMinutes()));
                    break;
                case 's':
                    // 秒,带前导零(00 到 59)
                    result.push(strPad(_time.getSeconds()));
                    break;
                default:
                    result.push(_format[ii]);
            }
        }
        return result.join('');
}

获取指定时间戳(毫秒)

function strtotime(string, time, toms){
   let date, timestamp, msg = "参数格式错误,请参照 a b a b ……,a:正负数整型,b:单位year(y年),month(m月),week(w周),day(d日),hours(h时),minutes(i分),seconds(s秒)\r\n如: '2 day -1 hours'=》47小时后\r\n如: '-2 day 1 hours'=》47小时前";
   // 判断是否是时间参数
   let isDateParam = function(_str,_toms){
       let _date,_timestamp;
       if(typeof _str === 'undefined' || !_str || (typeof _str === 'object' && _str.length === 0)){
           return new Date().valueOf();
       }
       // 判断下_str 是不是位于10至12位的纯阿拉伯数字,如果是转为毫秒时间戳
       // if(/^[1-9]\d{9,11}$/.test(_str)){
       //     _str*=1000;
       // }
       if(_str === 'now'){
           _date = new Date();
       }else{
           // 直接转处理_str如果是时间格式
           _date = new Date(_str);
       }
       if(_date.toString() !== 'Invalid Date' && _date.toLocaleDateString() !== '1970/1/1'){
           // _str就是时间值,参数二变成是否转为时间戳秒单位
           // 判断第二个参数,如果为真则转为秒的单位
           _timestamp = _date.valueOf();
           if(_toms){
               _timestamp = parseInt(_timestamp/1000);
           }
           return _timestamp;
       }
       return false;
   }
   // 判断string是否是直接时间字符串或时间对象,如果是直接返回值
   date = isDateParam(string,time);
   if(date && !isNaN(date)){
       return date;
   }
   // 判断_time参数
   date = isDateParam(time, false);
   if(date && !isNaN(date)){
       timestamp = date;
       date = new Date(date);
   }else{
       date = new Date();
       timestamp = date.valueOf();
   }
   let values,unitNames;
   try {
       // 提取数值和单位
       values = string.replace(/[^\d-+.]+/g,'_#_').split('_#_').filter(function (s) {
          return s && parseInt(s);
       });
       // 单位名
       unitNames = string.replace(/[\d-+.]+/g,'_#_').split('_#_').filter(function (s) {
          return s && s.trim();
       });
   } catch(error) {
       throw msg;
   }
   let oneDayTamp = 86400000, uniqueUnit = {},temp;
   for(let ii = 0; ii < values.length; ii++){
       if(unitNames[ii] === 'minutes'){
           unitNames[ii] = 'i';
       }
       if(unitNames[ii] && !uniqueUnit.hasOwnProperty(unitNames[ii][0])){
           let val = parseInt(values[ii]);
           uniqueUnit[unitNames[ii][0]] = 1;// 取单位的首字母
           switch(unitNames[ii]){
               case 'y':
                   // no break;
               case 'year':
                   temp = new Date(timestamp);
                   temp.setFullYear(temp.getFullYear() + val);
                   timestamp = temp.valueOf();
                   break;
               case 'm':
                   // no break;
               case 'month':
                   temp = new Date(timestamp);
                   temp.setMonth(temp.getMonth() + val);
                   timestamp = temp.valueOf();
                   break;
               case 'w':
                   // no break;
               case 'week':
                   timestamp += val*604800000;
                   break;
               case 'd':
                   // no break;
               case 'day':
                   timestamp += val*86400000;
                   break;
               case 'h':
                   // no break;
               case 'hours':
                   timestamp += val*3600000;
                   break;
               case 'i':
                   // no break;
               case 'minutes':
                   timestamp += val*60000;
                   break;
               case 's':
                   // no break;
               case 'seconds':
                   timestamp += val*1000;
                   break;
           }
       }
   }
   if(toms){
       timestamp = parseInt(timestamp/1000);
   }
   return timestamp;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值