JavaScript--时间类型处理

Posted bigbosscyb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于JavaScript--时间类型处理的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 有用的代码片段和 trick

JavaScript笔试题(js高级代码片段)

Python 自动化 - 浏览器chrome打开F12开发者工具自动Paused in debugger调试导致无法查看网站资源问题原因及解决方法,javascript反调试问题处理实例演示(代码片段

常用Javascript代码片段集锦

如何将此 JavaScript 代码片段翻译成 Parenscript?

Javascript代码片段在drupal中不起作用