ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

new Date时间格式转换方法

2021-10-21 12:03:21  阅读:311  来源: 互联网

标签:60 format replace 转换方法 date Date new


平时经常会使用到时间转换,组件库已经有很多组件可以自动生成时间类型了,但是底层的封装方法还是得有

获取当前时间 new Date()  或者自己拥有一个毫秒时间

方法如下

/**
 * title: 时间、日期对象的格式化
 * date:毫秒时间
 * format:事件格式"yyyy-MM-dd hh:mm:ss",年-月-日 时:分:秒
 * flag:计算剩余时间则为true(d天h时m分s秒)
 **/
function dateFormat(date, format, flag) {
    var o = {};
    if (!flag) {
        //eg:format="yyyy-MM-dd hh:mm:ss";
        format = format || "yyyy-MM-dd hh:mm:ss";
        date = new Date(Number(date));
        o = {
            "M+": date.getMonth() + 1, // month
            "d+": date.getDate(), // day
            "h+": date.getHours(), // hour
            "m+": date.getMinutes(), // minute
            "s+": date.getSeconds(), // second
            "q+": Math.floor((date.getMonth() + 3) / 3), // quarter
            "S": date.getMilliseconds()
        };
        if (/(y+)/.test(format)) {
            format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
        }
    } else { //剩余日期
        format = format || '年-月-日';
        var day = 0,
            hour = 0,
            minute = 0,
            second = 0;
        if (date > 0) {
            date = date / 1000;
            day = Math.floor(date / (60 * 60 * 24));
            hour = Math.floor(date / (60 * 60)) - day * 24;
            minute = Math.floor(date / 60) - day * 24 * 60 - hour * 60;
            second = Math.floor(date) - day * 24 * 60 * 60 - hour * 60 * 60 - minute * 60;
        }
        o = {
            "d+": day, // day
            "h+": hour, // hour
            "m+": minute, // minute
            "s+": second //second
        };
    }
    for (var k in o) {
        if (new RegExp("(" + k + ")").test(format)) {
            format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
        }
    }
    return format;
}

衍生出一个追加时间的方法

/**
 * title: 日期追加时间
 * time:时间(yyyy/MM/dd,yyyy/MM/dd hh:mm:ss,yyyy-MM-dd hh:mm:ss,yyyy-MM-ddThh:mm:ss.Z)这里最后一种时间格式下方的第二种方法会有说明
 * days:追加天数
 * format:返回时间格式
 * ms:毫秒、追加毫秒
 **/
function dateAddTime(time, days, format, ms) {
    days = Number(days) || 0;
    if (time.indexOf('-') != -1 && time.indexOf('T') == -1) {
        time = time.replace(/\-/g, '/');
    }
    var newTime;
    if (ms) {
        newTime = new Date(time).getTime() + Number(ms);
    } else {
        newTime = new Date(time).getTime() + days * 24 * 60 * 60 * 1000;
    }
    newTime = dateFormat(newTime, format);
    return newTime;
}

在这里补充第二种时间转换的方式,这是对当前时间进行格式转换的方法,使用的是toISOString()方法去获取 拿到的时间格式是// YYYY-MM-DDTHH:mm:ss.sssZ,所以需要对拿到的格式做一下替换处理

function rTime(){
    var dateTime = new Date();
    return dateTime.toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
}

这里会存在一个问题,网上谈论会出现8小时的时间差,说是用这个转换时间会丢失时区从而导致少8小时的原因,于是乎,改成了下面这样

function rTime(){
    var dateTime = new Date(+new Date()+8*3600*1000);
    return new Date(dateTime).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
}

然后看到还有一种方法是直接给小时上+8,和上面的做法其实差不多

function rTime(){
    var dateTime = new Date();
    var hour = dateTime.getHours + 8;
    dateTime.setHours(hour);
    return new Date(dateTime).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
}

toISOString()方法借鉴了 toISOString()得到的日期时差8小时

封装的方法参照了公司开发中的封装方法

标签:60,format,replace,转换方法,date,Date,new
来源: https://www.cnblogs.com/lemonnnnz/p/15432715.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有