恰好这周需求中有用到日期格式与unix时间戳的相互转换,查阅了一些资料,就打算写一篇博客总结一下。
但愿这篇文章足够简单粗暴,让你一目了然,有所收获。
var timeStamp = new Date("日期");
/*
目前我知道的支持转换的时期格式为:
1. "2018/1/1 8:00:00";
2. “2018,1,1 8:00:00”;
3. "2018-1-1 8:00:00";
4. "2019-01-08T00:51:02.000+0000" ;即后台返回的时间戳格式
*/
其中年份为必填,其余的都可以省略,月/日不填的话默认是1月1日。
时:分:秒不填的话 ==> 1.2种格式默认是00:00:00,第三种格式默认是08:00:00
var date = new Date(timeStamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
/*其实上面这一句,你就可以获得一个日期格式的时间了。
但如果你想要转换成指定格式的日期,可以看下面这个超好用的函数
*/
function timestampToTime(timestamp) {
let Y = date.getFullYear() + '-';
let M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
let D = date.getDate() < 10 ? '0' + date.getDate() + ' ': date.getDate() + ' ';
let h = date.getHours() < 10 ? '0' + date.getHours() + ':': date.getHours()+ ':';
let m = date.getMinutes() < 10 ? '0' + date.getMinutes() + ':' : date.getMinutes()+ ':';
let s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
return Y+M+D+h+m+s;
}
timestampToTime(1543655727202);//这里时间戳是13位,所以不需乘1000
console.log(timestampToTime(1543655727202);//2018-10-1 17:15:27
小tips:可以看到getMonth的地方做了一点小处理,是因为这里返回的月份是从0开始的,所以需要+1
1.获取当前时间戳的方法:
var timestamp1 = Date.parse(new Date()); //不推荐
var timestamp2 = (new Date()).valueOf();
var timestamp3 = new Date().getTime();
第一种方式无法精确到毫秒,会默认用000代替。
后两种均可以精确到毫秒。
2.对日期进行加减:
var d = new Date("2008/04/15");
d.setMonth(d.getMonth() + 1 + 1);
//加一个月,同理,可以加一天:getDate()+1,加一年:getYear()+1
//注意setMonth/setDate/getYear这些都是对unix时间的api
如果你快乐编程的时候突然发现报错:UnCaught TypeError:date.getMonth is not a function,那就是我上面说的,你先需要把date格式(日期格式)的时间转换成Date格式(时间戳格式)
再给一个现成的封装好的对日期days相加的函数,其他的类似写就好
function addDate(date,days){
var d=new Date(date);
d.setDate(d.getDate()+days);
var m=d.getMonth()+1;
return d.getFullYear()+'-'+m+'-'+d.getDate();
}
写到这里,应该能满足大部分产品的需求(神奇需求除外)
撒花,完结~
******************* 补充 *******************
3. 后台返回时间是秒,转换成时分秒00:00:00的形式。
let days = Math.floor(mss/(3600 * 24))
// if days > 0 ; let hours = Math.floor(mss/3600) - days * 24;
let hours = Math.floor(mss/3600)
let minutes = Math.floor(mss/60)%60;
let seconds = mss % 60;
hours = hours < 10 ? ('0' + hours) : hours;
minutes = minutes < 10 ? ('0' + minutes) : minutes;
seconds = seconds < 10 ? ('0' + seconds) : seconds;
4.时分秒00:00:00转化成时间戳
var timeToSec = function (time) {
var timeStamp = '';
var hour = time.split(':')[0];
var min = time.split(':')[1];
var sec = time.split(':')[2];
timeStamp = Number(hour*3600) + Number(min*60) + Number(sec);
return timeStamp;
};
5. 获取当前时间零点的时间戳
let zero_time = new Date(new Date().toLocaleDateString()).getTime();
// 当天时间+1天的时间戳即为
let tomorrow = zero_time + 24 * 3600 * 1000;
6. 返回指定时间与当前时间的倒计时
setTimer(time){
if(this.timer) return;
let now = new Date().valueOf();
let leftTime = parseInt((time - now) / 1000);
this.state.leftTime = leftTime;
if(leftTime > 0){
this.timer = setInterval(() => {
let left = this.state.leftTime - 1;
this.setState({leftTime: left})
if(left < 0){
clearInterval(this.timer) && (this.timer = null);
}
}, 1000)
}
}
// 此处传入的timestamp为leftTime
formatTime(timestamp){
let hours = Math.floor(timestamp/3600)
hours = hours < 10 ? '0' + hours : hours;
let minutes = Math.floor(timestamp/60)%60;
minutes = minutes < 10 ? '0' + minutes : minutes;
let seconds = timestamp % 60;
seconds = seconds < 10 ? ('0' + seconds) : seconds;
return hours + ':' + minutes + ':' + seconds
}