js中时间日期与时间戳相互转换的方法

恰好这周需求中有用到日期格式与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

好的,看到这里,如果你学到你想要的知识了,祝你食用愉快!js中时间日期与时间戳相互转换的方法_第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
    }

 

你可能感兴趣的:(web前端学习)