本文详细解析JavaScript中获取当前时间戳的五种常用方法,包括Date.now()、getTime()等,并对比其精度与适用场景。同时介绍将时间戳转换为可读日期的多种实现方案,重点分析toLocaleDateString在不同浏览器中的兼容性问题,提供跨浏览器兼容的日期格式化代码。此外,还涵盖Date对象的构造函数、返回值及与PHP时间戳的转换技巧,帮助开发者高效处理前端时间数据。
一、JavaScript时间转时间戳
在JavaScript中获取时间戳主要有五种方式,其中后四种均需基于实例化的Date对象进行进一步操作。JavaScript处理时间的核心在于Date对象。
方法一:Date.now()
使用Date.now()可以直接获取当前的时间戳。
console.log(Date.now()) //1642471441587方法二:Date.parse()
Date.parse()函数可将字符串或时间对象直接转换为时间戳。
Date.parse(new Date()) //1642471535000
Date.parse("2022/1/18 10:05") //1642471500000注意:不推荐此方法,因为其毫秒级别的数值会被截断为000。
方法三:valueOf()
通过调用valueOf()函数返回指定对象的原始值,从而获得精确的时间戳。
(new Date()).valueOf() //1642471624512方法四:getTime()
利用原型方法直接获取当前时间的毫秒值,结果准确。
new Date().getTime() //1642471711588方法五:Number
将时间对象转换为number类型的数值,该数值即为时间戳。
Number(new Date()) //1642471746435二、js时间戳转时间
我们可以直接利用new Date(时间戳)的格式来转换并获得当前时间,例如:
new Date(1472048779952)
Wed Aug 24 2016 22:26:19 GMT+0800 (中国标准时间)注意:时间戳参数必须是Number类型。如果传入字符串,解析结果将显示为Invalid Date。
若后端直接返回时间戳给前端,前端应如何转换?下面介绍两种实现方式。
方法一:生成'2022/1/18 上午10:09 '格式
function getLocalTime(n) {
return new Date(parseInt(n)).toLocaleString().replace(/:\d{1,2}$/,' ');
}
getLocalTime(1642471746435) //'2022/1/18 上午10:09 '也可以使用如下方式,根据需求截取位数,注意空格也计入在内。
function getLocalTime(n) {
return new Date(parseInt(n)).toLocaleString().substr(0,14)
}
getLocalTime(1642471746435) //'2022/1/18 上午10'或者利用正则表达式处理:
function getLocalTime(n){
return new Date(parseInt(n)).toLocaleString().replace(/年|月/g, "-").replace(/日/g, " ");
}
getLocalTime (1642471746435) //'2022/1/18 上午10:09:06'方法二:生成'yyyy-MM-dd hh:mm:ss '格式
先转换为Date对象,然后利用拼接正则等手段来实现:
function getData(n){
n=new Date(n)
return n.toLocaleDateString().replace(/\//g, "-") + " " + n.toTimeString().substr(0, 8)
}
getData(1642471746435) //'2022-1-18 10:09:06'不过这样转换在某些浏览器上会出现不理想的效果,因为toLocaleDateString()方法的输出因浏览器而异。例如IE显示为"2016年8月24日 22:26:19"格式,搜狗浏览器显示为"Wednesday, August 24, 2016 22:39:42"。
可以通过分别获取时间的年月日进行拼接,这样兼容性更好:
function getData(n) {
let now = new Date(n),
y = now.getFullYear(),
m = now.getMonth() + 1,
d = now.getDate();
return y + "-" + (m < 10 ? "0" + m : m) + "-" + (d < 10 ? "0" + d : d) + " " + now.toTimeString().substr(0, 8);
}
getData(1642471746435) //'2022-1-18 10:09:06'三、知识普及
1、当前系统区域设置格式(toLocaleDateString和toLocaleTimeString)
(new Date()).toLocaleDateString() + " " + (new Date()).toLocaleTimeString()
//'2022/1/18 上午10:30:30'2、普通字符串(toDateString和toTimeString)
(new Date()).toDateString() + " " + (new Date()).toTimeString()
//'Tue Jan 18 2022 10:30:50 GMT+0800 (中国标准时间)'3、格林威治标准时间(toGMTString)
(new Date()).toGMTString()
//'Tue, 18 Jan 2022 02:31:10 GMT'4、全球标准时间(toUTCString)
(new Date()).toUTCString()
//'Tue, 18 Jan 2022 02:31:25 GMT'5、Date对象字符串(toString)
(new Date()).toString()
'Tue Jan 18 2022 10:31:44 GMT+0800 (中国标准时间)'Date对象构造函数
Date对象具有多种构造函数:
new Date()
new Date(milliseconds)
new Date(datestring)
new Date(year, month)
new Date(year, month, day)
new Date(year, month, day, hours)
new Date(year, month, day, hours, minutes)
new Date(year, month, day, hours, minutes, seconds)
new Date(year, month, day, hours, minutes, seconds, microseconds) Date对象构造函数参数说明:
milliseconds - 距离JavaScript内部定义的起始时间1970年1月1日的毫秒数
datestring - 字符串代表的日期与时间。此字符串可以使用Date.parse()转换
year - 四位数的年份,如果取值为0-99,则在其之上加上1900
month - 0(代表一月)-11(代表十二月)之间的月份
day - 1-31之间的日期
hours - 0(代表午夜)-23之间的小时数
minutes - 0-59之间的分钟数
seconds - 0-59之间的秒数
microseconds - 0-999之间的毫秒数 Date对象返回值
如果没有任何参数,将返回当前日期;如果参数为一个数字,将数字视为毫秒值,转换为日期;如果参数为一个字符串,将字符串视为日期的字符串表示,转换为日期。还可以使用六个构造函数精确定义,并返回时间。
var d1 = new Date();
document.write(d1.toString());
var d2 = new Date("2009-08-08 12:12:12);
document.write(d2.toString());
var d3 = new Date(2009, 8, 8);
document.write(d3.toString());Date作为JavaScript的一种内置对象,必须使用new的方式创建。
Date对象在JavaScript内部的表示方式是距1970年1月1日午夜(GMT时间)的毫秒数(时间戳),我们在这里也把Date的内部表示形式称为时间戳。
可以使用getTime()将Date对象转换为Date的时间戳,方法setTime()可以把Date的时间戳转换为Date的标准形式。
Date函数使用语法
date.方法名(参数1,参数2,...); Date.方法名(); date代表一个日期对象的实例,date.方法名调用的为对象的成员函数;Date.方法名调用的为对象的静态函数。
var d=new Date();
var d2=Date.UTC();Date函数按功能分类
日期获取类函数
Date() 函数 -- Date对象的构造函数
getDate() 函数 -- 返回date对象中的月份中的天数(1-31)
getDay()函数 -- 返回date对象中的星期中的天数(0-6)
getFullYear() 函数 -- 返回date对象中的四位数年份
getHours()函数 -- 返回date对象中的小时数(0-23)
getMilliseconds() 函数 -- 返回date对象中的毫秒数(0-999)
getMinutes() 函数 -- 返回date对象中的分钟数(0-59)
getMonth() 函数 -- 返回date对象中的月份数(0-11)
getSeconds() 函数 -- 返回date对象中的秒数(0-59)
getTime() 函数 -- 返回date对象的时间戳表示法(毫秒表示)
getTimezoneOffset() 函数 -- 返回本地时间与用UTC表示当前日期的时间差,以分钟为单位
getUTCDate() 函数 -- 返回date对象中用世界标准时间(UTC)表示的月份中的一天(1-31)
getUTCDay() 函数 -- 返回date对象中用世界标准时间(UTC)表示的周中的一天(0-6)
getUTCFullYear() 函数 -- 返回date对象中用世界标准时间(UTC)表示的四位年份
getUTCHours() 函数 -- 返回date对象中用世界标准时间(UTC)表示的小时数(0-23)
getUTCMilliseconds() 函数 -- 返回date对象中用世界标准时间(UTC)表示的毫秒数(0-999)
getUTCMinutes() 函数 -- 返回date对象中用世界标准时间(UTC)表示的分钟数(0-59)
getUTCMonth() 函数 -- 返回date对象中用世界标准时间(UTC)表示的月份数(0-11)
getUTCSeconds() 函数 -- 返回date对象中用世界标准时间(UTC)表示的秒数(0-59)
getYear() 函数 -- 返回date对象的年份(真实年份减去1900)
Date.UTC()函数 -- 返回date对象距世界标准时间(UTC)1970年1月1日午夜之间的毫秒数(时间戳)日期设置类函数
setDate() 函数 -- 设置date对象中月份的一天,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setFullYear() 函数 -- 设置date对象中的年份,月份和天,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setHours() 函数 -- 设置date对象的小时,分钟,秒和毫秒,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setMilliseconds() 函数 -- 设置date对象的毫秒数,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setMinutes() 函数 -- 设置date对象的分钟,秒,毫秒,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setMonth() 函数 -- 设置date对象中月份,天,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setSeconds() 函数 -- 设置date对象中月份的一天,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setTime() 函数 -- 使用毫秒数设置date对象,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setUTCDate() 函数 -- 设置date对象中用世界标准时间(UTC)表示的月份的一天,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setUTCFullYear() 函数 -- 设置date对象中用世界标准时间(UTC)表示的年份,月份和天,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setUTCHours() 函数 --- 设置date对象中用世界标准时间(UTC)表示的小时,分钟,秒和毫秒,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setUTCMilliseconds() 函数 -- 设置date对象中用世界标准时间(UTC)表示的毫秒数,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setUTCMinutes() 函数 -- 设置date对象中用世界标准时间(UTC)表示的分钟,秒,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setUTCMonth() 函数 -- 设置date对象中用世界标准时间(UTC)表示的月份,天,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setUTCSeconds() 函数 -- 设置date对象中用世界标准时间(UTC)表示的秒,毫秒,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setYear() 函数 -- 设置date对象的年份(真实年份减去1900)日期打印类函数
toDateString() 函数 -- 返回date对象的日期部分的字符串表示
toGMTString() 函数 -- 返回date对象的格林威治时间(GMT)的字符串表示
toLocaleDateString函数 -- 返回date对象的日期部分的本地化字符串
toLocaleTimeString函数 -- 返回date对象的时间部分的本地化字符串
toTimeString()函数 -- 返回date对象的时间部分的字符串
toUTCString函数 -- 返回date对象的世界标准时间(UTC)的字符串表示日期解析类函数
Date.parse() 函数 -- 解析一个日期的字符串,并返回该日期距1970年1月1日午夜之间的毫秒数(时间戳)
JavaScript_Date函数按照字母分类
Date() 函数 -- Date对象的构造函数
getDate() 函数 -- 返回date对象中的月份中的天数(1-31)
getDay()函数 -- 返回date对象中的星期中的天数(0-6)
getFullYear() 函数 -- 返回date对象中的四位数年份
getHours()函数 -- 返回date对象中的小时数(0-23)
getMilliseconds() 函数 -- 返回date对象中的毫秒数(0-999)
getMinutes() 函数 -- 返回date对象中的分钟数(0-59)
getMonth() 函数 -- 返回date对象中的月份数(0-11)
getSeconds() 函数 -- 返回date对象中的秒数(0-59)
getTime() 函数 -- 返回date对象的时间戳表示法(毫秒表示)
getTimezoneOffset() 函数 -- 返回本地时间与用UTC表示当前日期的时间差,以分钟为单位
getUTCDate() 函数 -- 返回date对象中用世界标准时间(UTC)表示的月份中的一天(1-31)
getUTCDay() 函数 -- 返回date对象中用世界标准时间(UTC)表示的周中的一天(0-6)
getUTCFullYear() 函数 -- 返回date对象中用世界标准时间(UTC)表示的四位年份
getUTCHours() 函数 -- 返回date对象中用世界标准时间(UTC)表示的小时数(0-23)
getUTCMilliseconds() 函数 -- 返回date对象中用世界标准时间(UTC)表示的毫秒数(0-999)
getUTCMinutes() 函数 -- 返回date对象中用世界标准时间(UTC)表示的分钟数(0-59)
getUTCMonth() 函数 -- 返回date对象中用世界标准时间(UTC)表示的月份数(0-11)
getUTCSeconds() 函数 -- 返回date对象中用世界标准时间(UTC)表示的秒数(0-59)
getYear() 函数 -- 返回date对象的年份(真实年份减去1900)
Date.parse() 函数 -- 解析一个日期的字符串,并返回该日期距1970年1月1日午夜之间的毫秒数(时间戳)
setDate() 函数 -- 设置date对象中月份的一天,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setFullYear() 函数 -- 设置date对象中的年份,月份和天,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setHours() 函数 -- 设置date对象的小时,分钟,秒和毫秒,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setMilliseconds() 函数 -- 设置date对象的毫秒数,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setMinutes() 函数 -- 设置date对象的分钟,秒,毫秒,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setMonth() 函数 -- 设置date对象中月份,天,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setSeconds() 函数 -- 设置date对象中月份的一天,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setTime() 函数 -- 使用毫秒数设置date对象,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setUTCDate() 函数 -- 设置date对象中用世界标准时间(UTC)表示的月份的一天,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setUTCFullYear() 函数 -- 设置date对象中用世界标准时间(UTC)表示的年份,月份和天,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setUTCHours() 函数 --- 设置date对象中用世界标准时间(UTC)表示的小时,分钟,秒和毫秒,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setUTCMilliseconds() 函数 -- 设置date对象中用世界标准时间(UTC)表示的毫秒数,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setUTCMinutes() 函数 -- 设置date对象中用世界标准时间(UTC)表示的分钟,秒,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setUTCMonth() 函数 -- 设置date对象中用世界标准时间(UTC)表示的月份,天,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setUTCSeconds() 函数 -- 设置date对象中用世界标准时间(UTC)表示的秒,毫秒,并返回date对象距1970年1月1日午夜之间的毫秒数(时间戳)
setYear() 函数 -- 设置date对象的年份(真实年份减去1900)
toDateString() 函数 -- 返回date对象的日期部分的字符串表示
toGMTString() 函数 -- 返回date对象的格林威治时间(GMT)的字符串表示
toLocaleDateString函数 -- 返回date对象的日期部分的本地化字符串
toLocaleTimeString函数 -- 返回date对象的时间部分的本地化字符串
toTimeString()函数 -- 返回date对象的时间部分的字符串
toUTCString函数 -- 返回date对象的世界标准时间(UTC)的字符串表示
Date.UTC()函数 -- 返回date对象距世界标准时间(UTC)1970年1月1日午夜之间的毫秒数(时间戳)四、Javascript的时间戳和php的时间戳转换
js的时间戳通常是13位,php的时间戳是10位,转换函数如下:
var nowtime = (new Date).getTime();/*当前时间戳*/
/*转换时间,计算差值*/
function comptime(beginTime,endTime){
var secondNum = parseInt((endTime-beginTime*1000)/1000);//计算时间戳差值
if(secondNum>=0&&secondNum<60){
return secondNum+'秒前';
}
else if (secondNum>=60&&secondNum<3600){
var nTime=parseInt(secondNum/60);
return nTime+'分钟前';
}
else if (secondNum>=3600&&secondNum<3600*24){
var nTime=parseInt(secondNum/3600);
return nTime+'小时前';
}
else{
var nTime = parseInt(secondNum/86400);
return nTime+'天前';
}
}
t = comptime("1642471746",nowtime);//1642471746为PHP通过ajax回传的时间戳, 是10位
console.log(t); //27分钟前补充:
JavaScript 获取时间戳的5种方法
1.Date.parse(new Date())
const timestamp = Date.parse(new Date());
console.log(timestamp);
//输出 1591669256000 13位2.Math.round(new Date())
const timestamp = Math.round(new Date());
console.log(timestamp);
//输出 1591669961203 13位3.(new Date()).valueOf()
const timestamp = (new Date()).valueOf();
console.log(timestamp);
//输出 1591670037603 13位4.new Date().getTime()
const timestamp = new Date().getTime();
console.log(timestamp);
//输出 1591670068833 13位5.+new Date()
const timestamp = +new Date();
console.log(timestamp);
//输出 1591670099066 13位在开发中需要精确到秒的时候,推荐使用第1种方法,也需要除以1000才行;如果是需要时间戳毫秒的推荐+new Date()和new Date().getTime()。
到此这篇关于获取JAVASCRIPT时间戳函数的5种方法的文章就介绍到这了,更多相关js时间戳函数内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!