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