在 javascript 中內置了一個 Date 對象,可用於實現一些日期和時間的操作。 本文整理 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