js 時間經常使用處理方法

衆所周知,JavaScript核心包含Data()構造函數,用來建立表示時間和日期的對象。
若是給你們分享的是整篇的api,想必你們都沒有什麼看的慾望,若是你還對Data對象不是很瞭解,請先移步陪你讀書api

今天主要跟你們梳理一下,經常使用的時間、日期處理方法,方便你們使用和理解函數

格式化時間

老生常談,大概會這麼寫ui

1
2
3
4
5
6
7
8
9
10
11
var format = function (time) { 
var y = time.getFullYear(); //getFullYear方法以四位數字返回年份
var M = time.getMonth() + 1; // getMonth方法從 Date 對象返回月份 (0 ~ 11),返回結果須要手動加一
var d = time.getDate(); // getDate方法從 Date 對象返回一個月中的某一天 (1 ~ 31)
var h = time.getHours(); // getHours方法返回 Date 對象的小時 (0 ~ 23)
var m = time.getMinutes(); // getMinutes方法返回 Date 對象的分鐘 (0 ~ 59)
var s = time.getSeconds(); // getSeconds方法返回 Date 對象的秒數 (0 ~ 59)
return y + '-' + M + '-' + d + ' ' + h + ':' + m + ':' + s;
}

var time1 = format(new Date());

可是有什麼問題呢?通常來講小於10的值,要在前面添加字符串‘0’的,咱們大能夠寫個判斷來解決他,可是太麻煩了~spa

其實能夠這樣rest

1
2
3
4
5
6
7
8
var format = function (time) { 
var date = new Date(+time + 8 * 3600 * 1000);
return date.toJSON().substr(0, 19).replace('T', ' ').replace(/-/g, '.');
}
var time1 = format(new Date());

//Date的‘toJSON’方法返回格林威治時間的JSON格式字符串,轉化爲北京時間須要額外增長8個時區,而後把‘T’替換爲空格,便是咱們須要的時間格式,後面能夠經過正則將日期分隔符換成任何想要的字符。
//一元加操做符能夠把任何數據類型轉換成數字,因此獲取時間對象對應毫秒數的另外一個方法是+Date或Number(Date)

獲取當月最後一天

一個月可能有28/29/30/31天,使用寫死數據的方式來解決閏年和大小月顯然是不科學的。code

1
2
3
4
5
6
7
8
function getLastDayOfMonth (time) {
var month = time.getMonth();
time.setMonth(month+1);
time.setDate(0);
return time.getDate()
}
getLastDayOfMonth(new Date())
//先月份加一,再取上個月的最後一天

獲取這個季度第一天

用來肯定當前季度的開始時間,經常使用在報表中regexp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function getFirstDayOfSeason (time) {
var month = time.getMonth();
if(month <3 ){
time.setMonth(0);
}else if(2 < month && month < 6){
time.setMonth(3);
}else if(5 < month && month < 9){
time.setMonth(6);
}else if(8 < month && month < 11){
date.setMonth(9);
}
time.setDate(1);
return time;
}
getFirstDayOfSeason(new Date())
//先月份加一,再取上個月的最後一天

獲取中文星期

這也是個比較常見的雪球,徹底不必寫一長串switch啦,直接用charAt來解決。orm

1
let time ="日一二三四五六".charAt(new Date().getDay());

獲取今天是當年的第幾天

來看看今年本身已經浪費了多少時光~對象

1
2
3
4
var time1 = Math.ceil(( new Date() - new Date(new Date().getFullYear().toString()))/(24*60*60*1000));

//須要注意的是new Date()不設置具體時間的話new Date(2019)獲得的不是0點而是8點
//Tue Jan 01 2019 08:00:00 GMT+0800 (中國標準時間)

獲取今天是當年的第幾周

日曆、表單經常使用blog

1
2
3
var week = Math.ceil(((new Date() - new Date(new Date().getFullYear().toString()))/(24*60*60*1000))/7);

//在獲取第幾天的基礎上除7,向上取整

 

獲取今天是當年還剩多少天

再來看看今年還有多少天能夠浪費~

1
2
3
4
5
6
7
8
9
function restOfYear(time) {
var nextyear = (time.getFullYear() + 1).toString();
var lastday = new Date(new Date(nextyear)-1); //獲取本年的最後一毫秒:
console.log(lastday)
var diff = lastday - time; //毫秒數
return Math.floor(diff / (1000 * 60 * 60 * 24));
}
restOfYear(new Data())
//先取下一年第一秒,再減1毫秒。順便思考一下爲何👆是Math.ceil,👇是Math.floor。

計算兩個時間的間隔

能夠拓展爲倒計時、有效期等用途

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function diffTime(startDate,endDate,location) {
var diff=new Date(endDate).getTime() - startDate;//時間差的毫秒數

//計算出相差天數
var days=Math.floor(diff/(24*3600*1000));

//計算出小時數
var leave1=diff%(24*3600*1000); //計算天數後剩餘的毫秒數
var hours=Math.floor(leave1/(3600*1000));

//計算相差分鐘數
var leave2=leave1%(3600*1000); //計算小時數後剩餘的毫秒數
var minutes=Math.floor(leave2/(60*1000));

//計算相差秒數
var leave3=leave2%(60*1000); //計算分鐘數後剩餘的毫秒數
var seconds=Math.round(leave3/1000);
if(location === "Day") {
return returnStr = "還有" + days + "天";
}else if(location === "Hours") {
return returnStr = "還有" + (hours+days*24) + "小時";
}else if(location === "Minutes") {
return returnStr = "還有" + (minutes+(hours+days*24)*60) + "分鐘";
}else if(location === "Seconds") {
return returnStr = "還有" + (seconds+(minutes+(hours+days*24)*60)*60) + "秒";
}else{
return returnStr = "還有" + days + "天" + hours + "小時" + minutes + "分鐘" + seconds + "秒";
}
}
console.log(diffTime(new Date(), '2019-8-19 16:00:00','Minutes'))
//沒有寫的很複雜,方便各位修改拓展。

計算指定時間間隔先後的日期

可用於時間追溯、活動預告等用途

1
2
3
4
5
6
function GetDate(time,count) { 
time.setDate(time.getDate() + count);//獲取N天后的日期
var date = new Date(+time + 8 * 3600 * 1000);
return date.toJSON().substr(0, 19).replace('T', ' ').replace(/-/g, '.');
}
GetDate(new Date(),100)

計算當週開始和結束時間

很常見的需求,可用來作簽到等

1
2
3
4
5
6
7
8
9
10
11
12
13
function getwholetWeek(now){
var weekday = now.getDay(); // 獲取當前是周幾(週日:0)
weekday = weekday === 0 ? 7 : weekday;
var firstDay = GetDate(now,-weekday); //週日開始
var lastDay = GetDate(now,7 - 1); //週六結束
return {
firstDay: firstDay,
lastDay: lastDay
};
}

console.log(getwholetWeek(new Date()))
//調用前面日期間隔函數,可根據狀況改爲,週一開始,週日結束

 

來源:冰山工做室

相關文章
相關標籤/搜索