整理 js 日期對象的詳細功能,使用 js 日期對象獲取具體日期、昨天、今天、明天、每月天數、時間戳等,以及常用的日期時間處理方法

在 javascript 中內置了一個 Date 對象,可用於實現一些日期和時間的操作。

本文整理 js 日期對象的詳細功能,使用 js 日期對象獲取具體日期、昨天、今天、明天、每月天數、時間戳等,以及常用的日期時間處理方法。

在前端可以通過new Date()生成Date對象,如果沒有傳參數時,即獲取本地當前日期和時間。不過這時候顯示的內容並不是我們常見的日期格式,而是一個當前時區時間的描述文本,以下代碼顯示的效果如圖所示:

  const date = new Date();
  console.log(date);

 

 

 

如果希望顯示的內容格式化爲常見的日期格式,最簡單的辦法是調用 toLocaleString() 方法,如下所示:

  const date = new Date();
  console.log(date.toLocaleString());

 

 

new Date()可接受三種類型的參數

第一種是隻傳入一個number類型的參數,一般是時間戳的毫秒數,返回參數數字所處的時間,如下所示:

  const date = new Date(946684800000);
  console.log(date.toLocaleString());

第二種也只傳入一個參數,參數類型是string,不過需要是正確的格式,如 "2010-10-10 10:10:10",返回對應的時間:

  const date = new Date("2010-10-10 10:10:10");
  console.log(date.toLocaleString());
第三種是可以傳入多個參數,總共可傳7個 number 類型的參數,分別是年,月(0~11),日,小時,分鐘,秒鐘,毫秒。這種方式的每一個參數值沒有規定範圍,Date對象會自動幫我們算出對應的時間。 比如我們傳入的月是12,那麼生成的日期會自動修正爲第二年的1月。如下所示:
  const date = new Date(2022,12,1,10,10,10,999);
  console.log(date.toLocaleString());
 
Date對象還提供了很多方法,根據需要實現的功能,在下面列出一些常用的方法。
一、獲取時間戳
時間戳是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起到現在的總毫秒數。獲取時間戳的方法挺多,常見的有如下幾種:
最常用的 getTime 方法
  const date = new Date();
  console.log(date.getTime());
還有一種 Date.now() 方法,這是ECMAScript 5.1版本給Date對象增加的靜態方法。Date.now的速度比getTime快一倍以上,應該是獲取時間戳最快的方法。
console.log(Date.now());
valueOf方法是返回對象的原始值,在Date對象上也是返回時間戳,一般很少有人使用這個方法獲取時間戳
  const date = new Date();
  console.log(date.valueOf());
最簡單粗暴的方法,是直接把創建的Date對象轉換爲數字,+new Date(),不過性能更差一點
  const date = new Date();
  console.log(+date);

 

二、獲取常用時間數據

Date對象可以分別獲取到本地年、月、日、小時、分鐘、秒鐘、毫秒等數據,方法如下:
    date.getFullYear():獲取年
    date.getMonth():獲取月
    date.getDate():獲取日
    date.getDay():獲取一週的某一天(0~6)
    date.getHours():獲取小時
    date.getMinutes():獲取分鐘
    date.getSeconds():獲取秒
    date.getMilliseconds():獲取毫秒
使用這些方法,可以靈活的顯示日期時間格式,以下是一個格式化當前日期時間的函數:
  function formatDate(){
    // 創建日期對象
    const date = new Date();
    // 獲取各日期/時間數據
    let year = date.getFullYear();
    let month = date.getMonth();
    let DD = date.getDate();
    let hour = date.getHours();
    let minute = date.getMinutes();
    let second = date.getSeconds();
    let day = date.getDay();
    // 拼接日期時間爲字符串
    let time = year + '年' + month + '月' + DD + '日 ' + hour + ':' + minute + ':' + second + ' 星期' + ['日','一','二','三','四','五','六',][day];
    return time
  }
  console.log(formatDate())

 

 三、設置日期時間

除了在創建Date對象時,通過參數獲取到對應時間的Date對象,也可以設置Date對象的時間。
    date.setFullYear():設置年,setFullYear()可以傳3個參數,其中第2個和第3個是可選的,分別是要設置的年,月,日;
    date.setFullYear():設置月,預期值是 0~11,-1 將設置爲上一年的最後一個月、12 將設置爲明年的第一個月。setMonth()可以傳2個參數,其中第2個是可選的,分別是要設置的月,日;
    date.setDate():設置日,預期值是 1~31;0 會設置爲上個月的最後一天、-1 將設置爲上個月的最後一天的前一天、如果一個月有 31 天:32 將導致下個月的第一天;
    date.setHours():設置小時(0~23),setHours()可以傳4個參數,其中第2、3、4個是可選的,分別是要設置的時,分,秒,毫秒;
    date.setMinutes():設置分鐘(0~59),setMinutes()可以傳3個參數,其中第2個和第3個是可選的,分別是要設置的分,秒,毫秒
    date.setSeconds():設置秒(0~59),setSeconds()可以傳2個參數,其中第2個是可選的,分別是要設置的秒,毫秒
    date.setMilliseconds():設置毫秒(0~59)
使用設置日期方法,可以實現一些獲取指定日期時間的功能。
 
如果要獲取2020年的當前時間,就可以使用 setFullYear() 方法輕鬆實現,如下所示:
  const date = new Date();
  date.setFullYear(2020)
  console.log(date.toLocaleString());

 

又如獲取今年二月的最後一天(即當月的天數):
  const date = new Date();
  date.setMonth(2,0);
  console.log(date.getDate());

 

再或者獲取昨天和明天的日期:
  const date = new Date();
  date.setDate(date.getDate() + 1);
  console.log('明天是',date.toLocaleString());
  date.setDate(date.getDate() - 2);
  console.log('昨天是',date.toLocaleString());

 

在實際工作中,會經常需要獲取到特定的日期。可以封裝一個函數,用於獲取當前日期的前n天或後n天
  function getSpecificDate(day){
    //計算出要加/減的毫秒數
    var num = 1000*60*60*24*day;
    var newDate = new Date(Date.now()+num);
    return newDate;
  }

  console.log('明天是',getSpecificDate(1).toLocaleString());
  console.log('後天是',getSpecificDate(2).toLocaleString());
  console.log('昨天是',getSpecificDate(-1).toLocaleString());

 

 還有一種很方便的,給Date的原型方法中加入format方法,這樣在Date對象上可以直接使用format方法格式化所需要的日期。如下所示:

  Date.prototype.format = function(format){
    var o =  {
    "M+" : this.getMonth()+1, //month
    "d+" : this.getDate(), //day
    "h+" : this.getHours(), //hour
    "m+" : this.getMinutes(), //minute
    "s+" : this.getSeconds(), //second
    "q+" : Math.floor((this.getMonth()+3)/3), //quarter
    "S" : this.getMilliseconds() //millisecond
    };
    if(/(y+)/.test(format)){
      format = format.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
    }
    for(var k in o)  {
      if(new RegExp("("+ k +")").test(format)){
      format = format.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));
      }
    }
    return format;
  };
  console.log(new Date().format('yyyy-MM-dd hh:mm:ss'))

 

注: 在國內一般的項目都只需要獲取本地時間就足夠了,如果涉及到國外的項目,就可能需要獲取世界標準時間。獲取世界標準時間的方法就是在獲取本地時間的方法中加上UTC,如 getUTCDate
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章