js 時間常用處理方法

来源:https://www.cnblogs.com/you-uncle/archive/2019/11/08/11820300.html

眾所周知,JavaScript核心包含Data()構造函數,用來創建表示時間和日期的對象。 今天主要跟大家梳理一下,常用的時間、日期處理方法,方便大家使用和理解 格式化時間 老生常談,大概會這麼寫 1234567891011 var format = function (time) { var y ...


 

眾所周知,JavaScript核心包含Data()構造函數,用來創建表示時間和日期的對象。

今天主要跟大家梳理一下,常用的時間、日期處理方法,方便大家使用和理解

格式化時間

老生常談,大概會這麼寫

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’的,我們大可以寫個判斷來解決他,但是太麻煩了~

其實可以這樣

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天,使用寫死數據的方式來解決閏年和大小月顯然是不科學的。

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())
//先月份加一,再取上個月的最後一天

獲取這個季度第一天

用來確定當前季度的開始時間,常用在報表中

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來解決。

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 (中國標準時間)

獲取今天是當年的第幾周

日曆、表單常用

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毫秒。順便思考一下為什麼
您的分享是我們最大的動力!

更多相關文章
  • 代碼: <img src="images/001.jpg" alt="pic" onmouseover="this.src='images/001.jpg';" onmouseout="this.src='images/002.jpg';"/> ...
  • 作者:Dmitri Pavlutin 譯者:小維FE 原文:dmitripavlutin.com 國外文章,筆者採用意譯的方式,以保證文章的可讀性。 當執行像數據獲取這樣的I/O操作時,你必鬚髮起獲取請求,等待響應,將響應數據保存到組件的狀態中,最後渲染。非同步的數據獲取會要求額外的工作來適應Reac ...
  • 塊級作用域: ES6允許你使用塊級作用域,不過目前大多數的ES6語法只允許在嚴格模式下使用("use strict” )。 1 let關鍵字 作用:聲明變數,一個花括弧就是一個作用域(每個花括弧內就是全新變數). 特點:不在進行聲明提升,在塊作用域外無法訪問變數,和const一樣只能聲明一次. 關鍵 ...
  • 編輯表格輸入內容、根據input輸入框輸入數字動態生成表格行數、編輯表格內容提交傳給後臺數據處理 記錄自己學習做的東西,寫的小demo,希望對大家也有幫助! 代碼如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></tit ...
  • 題目描述 實現函數 makeClosures,調用之後滿足如下條件:1、返回一個函數數組 result,長度與 arr 相同2、運行 result 中第 i 個函數,即 result[i](),結果與 fn(arr[i]) 相同 示例1 1 //參考《JavaScript高級程式設計》的典型方法 2 ...
一周排行
x