Date时间
[[toc]]
Date.now() new Date().getTime(); new Date().valueOf()
new Date("2019-06-16 07:55:55");
date2 = new Date().toISOString().slice(0,10);
typeof date2
|
时间戳转标准时间
// 方法一
const dateFormat = (timestamp, formats) => { formats = formats || 'Y-m-d';
var zero = function (value) { if (value < 10) { return '0' + value; } return value; };
let myDate = timestamp? new Date(timestamp): new Date();
let year = myDate.getFullYear(); let month = zero(myDate.getMonth() + 1); let day = zero(myDate.getDate());
let hour = zero(myDate.getHours()); let minite = zero(myDate.getMinutes()); let second = zero(myDate.getSeconds());
return formats.replace(/Y|m|d|H|i|s/ig, function (matches) { return ({ Y: year, m: month, d: day, H: hour, i: minite, s: second })[matches]; }); };
const dateFormat = (timeStamp) => { let date = new Date(timeStamp); return date.getFullYear() + "年" + (date.getMonth() + 1).toString().padStart(2, 0) + "月" + (date.getDate()).toString().padStart(2, 0) + "日 " + (date.getHours()).toString().padStart(2, 0) + ":" + (date.getMinutes().toString().padStart(2, 0)); }
|
倒计时时间格式化
function format_time(timeStamp) { let day = Math.floor(timeStamp / (24 * 3600 * 1000)); let leave1 = timeStamp % (24 * 3600 * 1000); let hours = Math.floor(leave1 / (3600 * 1000)); let leave2 = leave1 % (3600 * 1000); let minutes = Math.floor(leave2 / (60 * 1000)); let leave3 = leave2 % (60 * 1000); let seconds = Math.floor(leave3 / 1000); if (day) return day + "天" + hours + "小时" + minutes + "分"; if (hours) return hours + "小时" + minutes + "分" + seconds + "秒"; if (minutes) return minutes + "分" + seconds + "秒"; if (seconds) return seconds + "秒"; return "时间到!"; }
|
距离现在多久
const SECOND = 1000 const MINUTE = SECOND * 60 const HOUR = MINUTE * 60 const DAY = HOUR * 24
function formatToInterval(timestamp) { let now = Date.now() let value = now - timestamp value = value < 1 ? 1 : value
if (value < MINUTE) { return Math.floor(value / SECOND) + '秒前' } if (value < HOUR) { return Math.floor(value / MINUTE) + '分钟前' } if (value < DAY) { return Math.floor(value / HOUR) + '小时前' } return format(timestamp, 'MM月DD日') }
|
坑点
var date1 = '12/04/2021 00:00:00' var time1 = new Date(date1) console.log(time1)
var date2 = '12/04/2021' var time2 = new Date(date2) console.log(time2)
var date3 = '12-04-2021' var time3 = new Date(date3) console.log(time3)
var date4 = '2021-12-04' var time4 = new Date(date4) console.log(time4)
var date5 = '2021-12-4' var time5 = new Date(date5) console.log(time5)
var date6 = '2021/12/4' var time6 = new Date(date6) console.log(time6)
|
除了第四种 其他都能满足预期,第四种加上 00:00:00 也能满足预期。
探究
那么为什么默认是8点呢?有没有觉得8这个数字很值得关注,我们所在的时区是东八区,如果以GMT标准0点来算的话,在那个时间点,这里就是8点啊。
那我就可以这样理解了,创建时间时,它默认时间确实是0点,但是是以GMT为基准的,所以将其转换成本地时间就是8点。而/分割的字符串在创建时,则是以本地时区为基准。
那么为什么js会对不同分割的时间字符串进行不同处理呢?貌似是因为-分隔且具有前导0的日期字符串,会被解析成ISO格式的字符串,以GMT时区为基准,不过我也没看懂。
说人话就是 09-11这种是规范的 ISO 格式,转到本地时间就成 八点了。
兼容性问题
const sendDate = "2021-06-07 10:07:32"; sendDate = sendDate.replace(/-/g, "/"); sendDate.getTime()
|