關於Date對象的一系列轉換及經常使用方法

我發現咱們在項目中常常會遇到一系列關於時間的操做,好比計算兩日期之間的相差天數等等,所以我打算好好整理一下,便於以後的項目會用到。
Date對象:用於處理日期和時間
1、建立Date對象正則表達式

var date1=new Date();//參數無,默認當前時間
var date2=new Date(num);//參數爲數字,返回1970-01-01 08:00:00+num(num爲毫秒)
var date3=new Date(string);//參數爲string,返回對應的時間
var date4=new Date(year, month, day, hours, minutes, seconds, milliseconds);//參數爲年-月-日-時-分-秒-毫秒,返回對應的時間
注意:在ie瀏覽器下new Date()不能夠處理'-',所以會報NaN的錯誤,咱們須要轉換成'/'。eg:new Date(startDate.replace(/-/g,"/"));

image
2、自身的經常使用方法
1.獲取瀏覽器

date1.getDate();//獲取當前天數       date1.getDay();//獲取當前星期幾 
date1.getFullYear();//獲取當前年份   date1.getHours();//獲取當前小時數
date1.getMinutes();//獲取當前分鐘數  date1.getMilliseconds();//獲取當前毫秒數    
date1.getMonth();//獲取當前月份-1      date1.getSeconds();//獲取當前秒數
date1.getTime();//獲取從1970-01-01到當前的毫秒數

2.設置this

date1.setDate(num);//設置當前天數       date1.setFullYear(num);//設置當前年份   
date1.setHours(num);//設置當前小時數    date1.setMinutes(num);//設置當前分鐘數  
date1.setMonth(num);//設置當前月份      date1.setMilliseconds(num);//設置當前毫秒數 
date1.setSeconds(num);//設置當前秒數    date1.setTime(num);//返回1970-01-01+num(num爲毫秒)

3.轉換spa

date1.toDateString();//將日期部分轉換成字符串      date1.toJSON();//將日期部分轉換成JSON
date1.toLocaleDateString();//根據本地時間格式,把 Date 對象的日期部分轉換爲字符串。
date1.toLocaleTimeString();//根據本地時間格式,把 Date 對象的時間部分轉換爲字符串。
date1.toLocaleString();////根據本地時間格式,把 Date 對象轉換爲字符串。      
date1.toTimeString();//將時間部分轉換成字符串

時間與時間戳的轉換
咱們要明白這二者之間的關係,參考關於時間的一切(時間戳、Date、表示時間的標準等).net

1,Unix時間戳(Unix timestamp)定義爲從1970年01月01日00時00分00秒(UTC)起至如今通過的 總秒數
2,JavaScript中提供的Date對象能夠將全部時間都存爲一個整數(new Date(num)),表示從1970年1月1日00:00:00起的 總毫秒數
這兩點意味着:
1)使用unix時間戳做爲參數須要乘以1000獲得毫秒數Date()對象才能正確接收,getTime時須要除以1000才能獲得時間戳。
2)js中判斷一個時間戳的精度,能夠靠時間戳長度:精確到秒是10位;精確到毫秒是13位。
3)在js中利用時間戳很容易計算出一個間隔恆定的時間軸,或者給一個時間推算出某段時間以前or以後的具體日期,或者日期比較

image

相關實例
一、將 Date 轉化爲指定格式的Stringprototype

// 月(M)、日(d)、小時(h)、分(m)、秒(s)、季度(q) 能夠用 1-2 個佔位符,
// 年(y)能夠用 1-4 個佔位符,毫秒(S)只能用 1 個佔位符(是 1-3 位的數字)
 Date.prototype.Format = function (fmt) { 
    var o = {
        "m+": this.getMonth() + 1, //月份
        "d+": this.getDate(), //日
        "h+": this.getHours(), //小時
        "i+": this.getMinutes(), //分
        "s+": this.getSeconds(), //秒
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度
        "S": this.getMilliseconds() //毫秒
    };
    if (/(y+)/.test(fmt)){
       fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
       for (var k in o){
       if (new RegExp("(" + k + ")").test(fmt)){
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
         }
       }
    }
     return fmt;
}
(new Date()).Format("yyyy-mm-dd hh:ii:ss.S");//2019-11-08 17:36:11.2
//正則表達式中y只是一個普通文本,用於匹配字母y
// y+的意思是:匹配1個到多個y
// (y+)的意思是:y+匹配到的內容可能經過分組來取到,這裏是經過第一個分組取到。從後面的代碼中能夠看出,RegExp.$1就是取到的y+匹配到的內容

二、獲取當前的前幾天或後幾天的時間3d

Date.prototype.AddDays = function (num) {
  if (isNaN(num) || num === null) {
    return this;
  }
  return new Date(this.getTime() + 24 * 60 * 60 * 1000 * num);
}
(new Date()).AddDays(-1).Format("yyyy-mm-dd")//2019-11-07
(new Date()).AddDays(2).Format("yyyy-mm-dd")//2019-11-10

三、計算兩日期之間的時間差unix

function differenceTime(date1,date2) { 
    var a=new Date(date1).getTime();
    var b=new Date(date2).getTime();
    iDays = parseInt(Math.abs(a - b) / 1000 / 60 / 60 / 24); //把相差的毫秒數轉換爲天數,Math.abs是取絕對值
    return iDays;
  }
differenceTime('2019-09-10','2019-10-10')//30

四、比較兩個時間的先後code

//true---> d1>d2,d1在d2以後,false--->d1<d2,d1在d2以前
function CompareDate(d1, d2) {
  return ((new Date(d1.replace(/-/g, "\/"))) > (new Date(d2.replace(/-/g, "\/"))));
}
 CompareDate('2019-11-11 12:22','2018-11-11 12:22')//true
相關文章
相關標籤/搜索