zoukankan      html  css  js  c++  java
  • JavaScript--时间类型处理

    Date类型使用的是UTC(国际协调时间)存储格式。Date类型能够保存的日期能够精确到1970年1月1日前后28万年左右。

    一、如何获取Date对象?最简单的是使用new Date()创建。

    只要使用new创建出来的Date对象 都是UTC格式。

    在使用Date构造函数创建日期对象时,参数的形式可以有一下几种:

    1、无参数:new Date();获得当前日期和时间。

    console.log(new Date()); //2020-01-15T09:12:20.704Z(临时值会不断改变)

    2、使用number类型 new Date(2000);2000表示距离1970-01-01 00:00:00时刻经过了多少毫秒;返回了2000代表的日期。

    console.log(new Date(2019)); //1970-01-01T00:00:02.019Z

    3、使用一定格式的字符串 new Date("2020-10-11 14:14:15");可以返回该字符串代表的日期。当然 2020,10,11或者2020/10/11都是可以的

    console.log(new Date('2020-1-16')); //2020-01-15T16:00:00.000Z

    4、使用一组int类型的参数列表 new Date(2020,12,21,14,14,15,666);//年,月,日,时,分,秒,毫秒;返回对应的日期。

    console.log(new Date(2019, 12, 22, 15, 20, 2)); //2020-01-22T07:20:02.000Z

    注意:month介于0~11(0表示1月 11表示12月);date介于1~31之间;hour介于0~23之间;minutes和seconds介于0~59之间。上面的月我写到了12之间 输出就和我们预想的不一样。

    二、Date类型都提供了哪些工具方法?

    var newdate = new Date();
    console.log(newdate.getFullYear() + ''); //获取年份 2020年
    console.log((newdate.getMonth() + 1) + ''); //获取月份 1月
    console.log(newdate.getDate() + ''); //获取现在是几号 15号
    console.log('星期' + newdate.getDay()); //获取星期几 星期3
    console.log(newdate.getHours() + ''); //获取小时 17时
    console.log(newdate.getMinutes() + ''); //获取分 28分
    console.log(newdate.getSeconds() + ''); //获取秒 35秒
    console.log(newdate.getMilliseconds() + '毫秒'); //获取毫秒 46毫秒

    三、Date如何格式化成一定格式的字符串?

    //将日期类型转化为年-月-日 时:分:秒
    var formatDate = function(aa) {
        var y = aa.getFullYear();
        var m = aa.getMonth() + 1;
        if (m > 10) {
            //不需要进位
        } else {
            //需在前面补零
            m = '0' + m;
        }
        var d = aa.getDate();
        d = (d > 10) ? d : '0' + d;
        var h = aa.getHours();
        h = (h > 10) ? h : '0' + h;
        var min = aa.getMinutes();
        min = (min > 10) ? min : '0' + min;
        var s = aa.getSeconds();
        s = (s > 10) ? s : '0' + s;
        return y + '-' + m + '-' + d + ' ' + h + ':' + min + ':' + s;
    }
    
    //日期格式转化成 年月日
    var returndatestr = function(dd) {
        var y = dd.getFullYear();
        var m = dd.getMonth() + 1;
        m = (m > 10) ? m : '0' + m;
        var d = dd.getDate();
        d = (d > 10) ? d : '0' + d;
        return y + '-' + m + '-' + d;
    }
    //customeDate是new Date()创建的
    console.log(formatDate(customeDate));//2020-01-15 17:28:35
    console.log(returndatestr(customeDate));//2020-01-15

    四、时间戳是什么:当前距离1970年1月1日零时零分零秒相隔多少毫秒。以number类型表示。

    如何获取时间戳:三种方法 1、date的valueof()方法;2、date的getTime()方法;3、date的parse(yourDate)方法。

    /*一年大概是三千万秒 所以10年大概是3亿秒*/
    var mydate = new Date('2020-1-16 12:13:14'); //日期类型字符串转换成时间戳
    var timevalue = mydate.valueOf(); //使用valueof获取时间戳 1579059228439
    var timevalue2 = mydate.getTime(); //使用getTiem获取时间戳 1579059228439
    var timevalue3 = Date.parse(mydate); //使用parse获取时间戳 1579059228000 后三位变成了000(后三位是毫秒) 所以不推荐
    console.log(`时间戳1:${timevalue}、时间戳2:${timevalue2}、时间戳3:${timevalue3}`);//时间戳1:1579147994000、时间戳2:1579147994000、时间戳3:1579147994000

    五、将时间戳转换为指定格式的字符串

    //转换成 年-月-日 时:分:秒 的形式
    function timestampTodateStr(shijianchuo) { let innerdate
    = new Date(shijianchuo); var y = innerdate.getFullYear(); var m = innerdate.getMonth() + 1; m = (m > 10) ? m : '0' + m; var d = innerdate.getDate(); d = (d > 10) ? d : '0' + d; var h = innerdate.getHours(); h = (h > 10) ? h : '0' + h; var min = innerdate.getMinutes(); min = (min > 10) ? min : '0' + min; var s = innerdate.getSeconds(); s = (s > 10) ? s : '0' + s; return y + '-' + m + '-' + d + ' ' + h + ':' + min + ':' + s; } var datestr = timestampTodateStr(1579147994000); console.log(datestr);//2020-01-16 12:13:14

    六、时间戳智能转换为日期格式的字符串,格式可自定义。摘抄自:https://www.cnblogs.com/zyt-it/p/10338360.html

    /*
        时间日期格式化
        时间戳
        自定义格式
        auto true计算时间差 false 转化为指定格式的字符串
    */
    function timestampFormatDate(timeStamp, type = 'Y-M-D H:I:S', auto = true) {
        let time = (timeStamp + '').length === 10 ? new Date(parseInt(timeStamp) * 1000) : new Date(parseInt(timeStamp));
        let _year = time.getFullYear();
        let _month = (time.getMonth() + 1) < 10 ? '0' + (time.getMonth() + 1) : (time.getMonth() + 1);
        let _date = time.getDate() < 10 ? '0' + time.getDate() : time.getDate();
        let _hours = time.getHours() < 10 ? '0' + time.getHours() : time.getHours();
        let _minutes = time.getMinutes() < 10 ? '0' + time.getMinutes() : time.getMinutes();
        let _secconds = time.getSeconds() < 10 ? '0' + time.getSeconds() : time.getSeconds();
        let formatTime = '';
        let distinctTime = new Date().getTime() - time.getTime();
    
        if (auto) {
            if (distinctTime <= (1 * 60 * 1000)) {
                // console.log('一分钟以内,以秒数计算');
                let _s = Math.floor((distinctTime / 1000) % 60);
                formatTime = _s + '秒前';
            } else if (distinctTime <= (1 * 3600 * 1000)) {
                // console.log('一小时以内,以分钟计算');
                let _m = Math.floor((distinctTime / (60 * 1000)) % 60);
                formatTime = _m + '分钟前';
            } else if (distinctTime <= (24 * 3600 * 1000)) {
                // console.log('一天以内,以小时计算');
                let _h = Math.floor((distinctTime / (60 * 60 * 1000)) % 24);
                formatTime = _h + '小时前';
            } else if (distinctTime <= (30 * 24 * 3600 * 1000)) {
                let _d = Math.floor((distinctTime / (24 * 60 * 60 * 1000)) % 30);
                formatTime = _d + '天前';
                // console.log('30天以内,以天数计算');
            } else {
                // 30天以外只显示年月日
                formatTime = _year + '-' + _month + '-' + _date;
            }
        } else {
    
            switch (type) {
                case 'Y-M-D H:I:S':
                    formatTime = _year + '-' + _month + '-' + _date + ' ' + _hours + ':' + _minutes + ':' + _secconds;
                    break;
                case 'Y-M-D H:I:S zh':
                    formatTime = _year + '' + _month + '' + _date + '' + _hours + ':' + _minutes + ':' + _secconds;
                    break;
                case 'Y-M-D H:I':
                    formatTime = _year + '-' + _month + '-' + _date + ' ' + _hours + ':' + _minutes;
                    break;
                case 'Y-M-D H':
                    formatTime = _year + '-' + _month + '-' + _date + ' ' + _hours;
                    break;
                case 'Y-M-D':
                    formatTime = _year + '-' + _month + '-' + _date;
                    break;
                case 'Y-M-D zh':
                    formatTime = _year + '' + _month + '' + _date + '';
                    break;
                case 'Y-M':
                    formatTime = _year + '-' + _month;
                    break;
                case 'Y':
                    formatTime = _year;
                    break;
                case 'M':
                    formatTime = _month;
                    break;
                case 'D':
                    formatTime = _date;
                    break;
                case 'H':
                    formatTime = _hours;
                    break;
                case 'I':
                    formatTime = _minutes;
                    break;
                case 'S':
                    formatTime = _secconds;
                    break;
                default:
                    formatTime = _year + '-' + _month + '-' + _date + ' ' + _hours + ':' + _minutes + ':' + _secconds;
                    break;
            }
        } // 返回格式化的日期字符串
        return formatTime;
    }
    var consoles = timestampFormatDate(1578992380000);//输入时间与现在在30天内就显示具体相隔多久
    var consoles1=timestampFormatDate(8000);//输入时间与现在相隔很久 就会显示那天的日期
    console.log(consoles);//1天前
    console.log(consoles1);//1970-01-01
  • 相关阅读:
    IBatis简介
    cntlm代理使用
    bash快捷键你知道几个?
    django的Form中添加属性
    EMACS 中文显示为方框
    git合并子树
    算法 排序 python 实现堆排序
    android org.eclipse.wst.sse.core 0.0.0' but it could not be found
    我的EMACS配置
    python 输入# 自动跳到行首
  • 原文地址:https://www.cnblogs.com/bigbosscyb/p/12197978.html
Copyright © 2011-2022 走看看