Javascript获取当前时间戳有三种方法,有两种可以精确到毫秒,另外一种可以精确到秒,具体如下
var timestamp = Date.parse(new Date());
//精确到秒
//输出为1517457493000
var timestamp = (new Date()).valueOf();
//精确到毫秒
//输出为1517457493101
var timestamp = new Date().getTime();
//精确到毫秒
//输出为1517457493101
嘘,都别忘了,单单这样获取的时间戳可不是网络上的时间戳!
什么意思呢?就举个栗子~这里先定义一个“标准时间”
当标准时间为 2018-02-01 00:00:00
此时的时间戳为:1517414401000
分别运行上方三个函数,并输出,得到的三个结果都是1517414401000
,嗯,没错这与标准时间相同,可是,此时用户修改了时间,返回的结果就不是以上的“标准时间”了
也就是说,这种方法获取的是用户系统上时间戳,当用户的系统时间不对,输出的结果也跟随着跑掉了,假如我们要做一个“站点建立时间”,这种方法显然是行不通的。
#怎么避免
这个简单,只需要获取网络上的时间戳就行了。
可到哪里获取网络时间戳捏?又得找一个api吗? (逃。。。
完全不用,浏览器向服务器发起请求的时候,有一个响应头,里面就藏着我们想要的东西嘿嘿
以下就以添加博客建立天数为栗子 = =
#获取
Ajax是个好东西
新建一个Ajax请求,把响应头里的时间戳抓过来:
ajax()
function ajax(option){
var xhr = null;
if(window.XMLHttpRequest){
xhr = new window.XMLHttpRequest();
}else{ // 兼容ie
xhr = new ActiveObject("Microsoft")
}
xhr.open("get","location.href");
xhr.send(null);
xhr.onreadystatechange = function(){
var time = null,
curDate = null;
if(xhr.readyState===2){
// 获取时间戳
time = xhr.getResponseHeader("Date");
console.log(xhr.getAllResponseHeaders())
curDate = new Date(time);
}
}
}
#输出
数据已经抓过来了,尝试输出:
alert(curDate.getTime());
输出结果为:
1517414401000
所以这种方法获取到了秒级时间戳,上面的时间戳多了三个我们用不到的”0”,所以除去1000消去三个0
alert( (curDate.getTime() / 1000 ) );
回想我们博客建立时的时间,转换成时间戳,然后用获取到的时间戳减去博客建立时的时间戳,再除去一天的秒数(86400秒),得到已经建立的天数:
alert( (((curDate.getTime() / 1000) - 1514020000 ) / 86400 )) );
//其中1514020000是我的建立时间戳
得到的结果肯定是小数,我们只需parseInt()
取整即可;
alert( parseInt((((curDate.getTime() / 1000) - 1514020000 ) / 86400 )) );
获取到的数据也可以不用以时间戳的形式输出:
alert( curDate.getFullYear() );
//当前所在年份
alert( curDate.getMonth() );
//当前所在月份
alert( curDate.getDate() );
//天数
alert( curDate.getHours() );
//小时
alert( curDate.getMinutes() );
//分钟
alert( curDate.getSeconds() );
//还有秒 = =
还有更多玩法等你探索呐