js 时间戳转换,全网最牛业务逻辑解析,逐行解析代码,千万不要错过,里面有些错误场景你可能还不知道
创始人
2024-05-30 18:29:55
0

 一、注意事项

1、js只识别13位的时间戳

2、10位的是unix时间戳

 

二、小试牛刀--日期类型转换成时间戳

可先将js字符串转换为date类型,再转换为时间戳类型。
字符串格式为 yyyy-MM-dd HH:mm:ss或者yyyy-MM-dd

//把字符串转换成时间格式
let date = new Date('2023-11-12 13:14:15:16');// 精确到毫秒
let time1 = date.getTime();// 精确到毫秒
let time2 = date.valueOf();// 精确到秒
let time3 = Date.parse(date);
console.log(time1)
console.log(time2)
console.log(time3)// 输出结果
// 1699766055016
// 1699766055016
// 1699766055000
console.log('time1=='+time1,'长度:'+time1.toString().length)
console.log('time2=='+time2,'长度:'+time2.toString().length)
console.log('time3=='+time3,'长度:'+time3.toString().length)// 输出结果
time1==1699766055016 长度:13
time2==1699766055016 长度:13
time3==1699766055000 长度:13

time1、time2:会精确到毫秒,
time3:只能精确到秒,毫秒用000替代,

----------
注意:获取到的时间戳除以1000就可获得Unix时间戳,再传值给后台。

----------

 

三、时间方法

Date() 返回当日的日期和时间。 

getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。 

getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。 

getMonth() 从 Date 对象返回月份 (0 ~ 11)。 

getFullYear() 从 Date 对象以四位数字返回年份。 

getYear() 请使用 getFullYear() 方法代替。 

getHours() 返回 Date 对象的小时 (0 ~ 23)。 

getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。 

getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。 

getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。 

getTime() 返回 1970 年 1 月 1 日至今的毫秒数。 

getTimezoneOffset() 返回本地时间与格林威治标准时间 (GMT) 的分钟差。 

getUTCDate() 根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。 

getUTCDay() 根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。 

getUTCMonth() 根据世界时从 Date 对象返回月份 (0 ~ 11)。 

getUTCFullYear() 根据世界时从 Date 对象返回四位数的年份。 

getUTCHours() 根据世界时返回 Date 对象的小时 (0 ~ 23)。 

getUTCMinutes() 根据世界时返回 Date 对象的分钟 (0 ~ 59)。 

getUTCSeconds() 根据世界时返回 Date 对象的秒钟 (0 ~ 59)。 

getUTCMilliseconds() 根据世界时返回 Date 对象的毫秒(0 ~ 999)。 

parse() 返回1970年1月1日午夜到指定日期(字符串)的毫秒数。 

setDate() 设置 Date 对象中月的某一天 (1 ~ 31)。 

setMonth() 设置 Date 对象中月份 (0 ~ 11)。 

setFullYear() 设置 Date 对象中的年份(四位数字)。 

setYear() 请使用 setFullYear() 方法代替。 

setHours() 设置 Date 对象中的小时 (0 ~ 23)。 

setMinutes() 设置 Date 对象中的分钟 (0 ~ 59)。 

setSeconds() 设置 Date 对象中的秒钟 (0 ~ 59)。 

setMilliseconds() 设置 Date 对象中的毫秒 (0 ~ 999)。 

setTime() 以毫秒设置 Date 对象。 

setUTCDate() 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。 

setUTCMonth() 根据世界时设置 Date 对象中的月份 (0 ~ 11)。 

setUTCFullYear() 根据世界时设置 Date 对象中的年份(四位数字)。 

setUTCHours() 根据世界时设置 Date 对象中的小时 (0 ~ 23)。 

setUTCMinutes() 根据世界时设置 Date 对象中的分钟 (0 ~ 59)。 

setUTCSeconds() 根据世界时设置 Date 对象中的秒钟 (0 ~ 59)。 

setUTCMilliseconds() 根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。 

toSource() 返回该对象的源代码。 

toString() 把 Date 对象转换为字符串。 

toTimeString() 把 Date 对象的时间部分转换为字符串。 

toDateString() 把 Date 对象的日期部分转换为字符串。 

toGMTString() 请使用 toUTCString() 方法代替。 

toUTCString() 根据世界时,把 Date 对象转换为字符串。 

toLocaleString() 根据本地时间格式,把 Date 对象转换为字符串。 

toLocaleTimeString() 根据本地时间格式,把 Date 对象的时间部分转换为字符串。toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串。 

UTC() 根据世界时返回 1997 年 1 月 1 日 到指定日期的毫秒数。valueOf() 返回 Date 对象的原始值。

四、时间在安卓、苹果、IE浏览器上的差异化,或你可能遇到一些奇葩的时间格式

第一种:2022:08:16 12:00:00

第二种:2022-08-16 12:00:00

第三种:2020-10-27T14:36:23

1.这个很明显,第一种不是 理想时间格式,我们需要转换下

var time = '2022:08:16 12:00:00';new Date(time);//会报错var timeArray=time.split(' ');//分割var _time1=timeArray[0];//只赋值日期部分_time1=_time1.replace(/:/g,'/');//把:替换成/time=_time1+' '+timeArray[1];//连接成可解析的时间格式new Date(time);//不报错

运行结果 

 

2.在某些情况下,或者说某些浏览器里不识别带-分隔符的日期格式,我们同样需要转换,我记得IE是不识别带-分隔符的日期格式

var time = '2022-08-16 12:00:00';time=time.replace(/-/g,'/');//把-替换成/new Date(time);//不报错

运行结果 

 五、时间戳转换核心方法

调用时如果传空则是当前日期 

/*** 时间戳转换* */
function DateTimeConvert(time, type) {var d= new Date(); if(time==''||time=='null'||time==undefined){d= new Date();} else if(time.toString().length==10) {//js只识别13位的时间戳,一般情况下后端的时间戳是10位的time = Number(time)*1000;d= new Date(time); }else if(time.toString().length==13){time = Number(time);d= new Date(time); }else{console.error('时间戳格式错误');return false;}var year = d.getFullYear();var month = d.getMonth() + 1;var day = d.getDate();var hours = d.getHours();var min = d.getMinutes();var seconds = d.getSeconds();if (month < 10) month = '0' + month;if (day < 10) day = '0' + day;if (hours < 0) hours = '0' + hours;if (min < 10) min = '0' + min;if (seconds < 10) seconds = '0' + seconds;var res = "";switch (type) {case 'yyyy-mm-dd':res = (year + '-' + month + '-' + day);break;case 'yyyy-mm-dd hh:mm':res = (year + '-' + month + '-' + day + ' ' + hours + ':' + min);break;default:res = (year + '-' + month + '-' + day + ' ' + hours + ':' + min + ':' + seconds);break;}return res;
};


参考文章 

文章一:

js 中日期转换成时间戳
https://www.cnblogs.com/mmzz3322/p/11218017.html

文章二:

时间戳转换js
https://blog.csdn.net/L_15737525552/article/details/126370583


延伸阅读

js将时间转换成时间戳10位_js 日期转10位时间戳_橙-极纪元的博客-CSDN博客

js 获取时间戳 和随机数_js取时间戳的随机数_橙-极纪元的博客-CSDN博客

js 时间戳格式转换常规时间格式_js日期格式转化为常规格式_橙-极纪元的博客-CSDN博客

js将/Date(1642563573347)/转成可读的日期格式,js时间戳转换可读的日期格式_js /date(16725_橙-极纪元的博客-CSDN博客

JS 时间运算大全_11:20-7:50怎么算 js_橙-极纪元的博客-CSDN博客

万能js时间日期格式转换_橙-极纪元的博客-CSDN博客

相关内容

热门资讯

文化中国行丨写意无穷趣 方寸有...   以汉字为表象,以石料为载体,以刀具为笔,篆刻艺术将汉字之美凝于方寸之间。由古代印章技艺发展而来、...
将被实施其他风险警示,华铭智能... 北京商报讯(记者马换换王蔓蕾)7月4日晚间,华铭智能(维权)(300462)披露公告称,公司股票自7...
祥鑫科技:控股股东、实际控制人... 转自:财联社【祥鑫科技:控股股东、实际控制人陈荣、谢祥娃拟减持不超过3%公司股份】财联社7月4日电,...
中星集团控股(00055.HK... 格隆汇7月4日丨中星集团控股(00055.HK)公告,自2025年7月4日起,由于组织架构变动:1....
拉萨公开招募!!! 转自:拉萨发布亲爱的小朋友们你们是否怀揣着一颗跃动的心渴望在歌声的海洋中徜徉一起用歌声点亮梦想?由中...
都江堰紧急调峰6600万方 为... 中新网成都7月4日电 (记者 何浠)记者4日从四川省都江堰水利发展中心获悉,为应对7月3日成都市主城...
第五届长三角体育节轮滑比赛上海... 7月4日上午9点半,第五届长三角体育节轮滑比赛于金山轮滑球馆正式拉开帷幕。这场由苏浙皖沪三省一市体育...
开创电气:越南生产基地产能暂时... 证券日报网讯开创电气7月4日发布公告,在公司回答调研者提问时表示,越南生产基地目前是按年产80万台手...
“热得要命”不是开玩笑!有这些... 本文转自【央广网】;近日,浙江高速路上发生惊险一幕,两名乘客突发热射病,司机紧急破窗施救,所幸及时得...
个人创业投资小项目(小投资创业... 这是粉丝的问题。对于创业项目的选择,我一直坚持与自己的实际条件和资源相匹配,比较靠谱,不仅仅是资金投...