本文是 重溫基礎 系列文章的第七篇。
今日感覺:作好自律。html
系列目錄:前端
本章節複習的是JS中的時間對象,一些處理的方法。 git
前置知識:
JavaScript中的時間是以1970年1月1日00:00:00以來的毫秒數來儲存數據類型。 Data
對象的範圍是相對距離UTC1970年1月1日的先後100,000,000天。
建立一個時間對象:github
let d = new Date([params]);
參數params
能夠是:segmentfault
"月 日, 年 時:分:秒."或者"年月日 時分秒"瀏覽器
let d = new Date("2018-12-20");
若是你省略時、分、秒,那麼他們的值將被設置爲0。微信
let d = new Date(2018, 12, 20);
let d = new Date(2018, 12, 20, 23, 20, 10);
這裏Date對象涉及到的方法特別多,請移步W3school JavaScript Date 對象ide
經常使用處理的方法有如下幾類:函數
set
":用於設置Date對象的日期和時間的值。get
":用去獲取Date對象的日期和時間的值。to
":用於返回Date對象的字符串格式的值。parse
和UTC
":用於解析Date字符串。須要注意的Date對象的一些數值問題:post
例如:
let d = new Date('2018-12-10'); let d1 = d.getMonth(); // 11 let d2 = d.getFullYear(); // 2018
獲取今年剩下的天數:
let d = new Date(); let e = new Date(2018, 11, 31, 23, 59, 59, 999); // 設置年月日時分秒 e.setFullYear(d.getFullYear); // 設置爲今年 let m = 24 * 60 * 60 * 1000; // 每日毫秒數 let result = (e.getTime() - d.getTime()) / m; result = Math.round(result); // 返回今年剩餘天數
這裏Date對象涉及到的方法特別多,請移步W3school JavaScript Date 對象
注意:
格林尼治標準時間(GMT)英國、愛爾蘭、冰島和葡萄牙屬於該時區。這個時區與中國北京時間的時差是8個小時,也就是說比北京時間晚8個小時。
爲一個時間對象設置指定日期(2018年12月20日),注意這裏:和前面說的同樣,12月在JS的Date對象中,是用11
表示。
let d = new Date(); d.setFullYear(2018,11,20);
設置時間對象10
天之後:
let d = new Date(); d.setDate(d.getDate() + 10); // 先獲取當天的日期,再設置到指定天數之後
一般狀況下,像下面這樣簡單比較:
let d = new Date(); let e = new Date(); d.setFullYear(2018,10,10); let r = d > e ? 'good' : 'nice' ; // nice
還能夠比較兩個日期相差多少天:
let d1 = new Date('2018-10-10'); let d2 = new Date('2018-11-11'); let d3 = (d2 - d1) / (1000 * 60 * 60 * 24); // 32
function d (num){ if(typeof Number(num) === 'number'){ let d1 = new Date(); let d2 = d1.setDate(d1.getDate() + Number(num)); let n = new Date(d2).getDay(); let s = ''; switch (n){ case 0 : s = "星期天"; break; case 1 : s = "星期一"; break; case 2 : s = "星期二"; break; case 3 : s = "星期三"; break; case 4 : s = "星期四"; break; case 5 : s = "星期五"; break; case 6 : s = "星期六"; break; } return s; }else { alert('請輸入正確數字!'); } }
常見的日期格式化爲字符串的方法有這些:
toDateString()
——以特定於實現的格式顯示星期幾、月、日和年;toTimeString()
——以特定於實現的格式顯示時、分、秒和時區;toLocaleDateString()
——以特定與地區的格式顯示星期幾、月、日和年;toLocaleTimeString()
——以特定於實現的格式顯示時、分、秒;toUTCString()
——以特定於實現的格式完整的UTC日期。獲取並格式化日期:年-月-日:
function d (date){ return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate(); } d(new Date()); // "2018-12-20"
日期字符串轉爲 年-月-日:
function d (str){ return new Date(Date.parse(str.replace(/-/g, '/'))); // 或者 // return new Date(str.replace(/-/g, '/')); }
獲取當前星期幾:
let d = "今天是星期" + "日一二三四五六".charat(new Date().getDay());
這裏有個小技巧,若給new Date()
傳入一個如aaaa/aa/0
參數時,能夠獲得aa
月的前一個月的最後一天,如傳入2018/12/0
會獲得2018/11/30
。
值得注意的是: 在Chrome瀏覽器上並不支持,會返回Invalid Date
致使結果爲NaN
,可是咱們可使用aaaa,aa,0
形式做爲參數,下面分別寫出這兩種:
// aaaa/aa/0形式 只要傳入年和月 function d (y, m){ m = parseInt(m, 10) + 1; let r = new Date(y + '/' + m + '/0'); return r.getDate(); } // aaaa,aa,0形式 只要傳入年和月 function d (y, m){ m = parseInt(m, 10) + 1; let r = new Date(y, m, 0); return r.getDate(); }
傳入參數的格式"yyyy-mm-dd",其實也能夠是Date()對象,你們能夠自行嘗試。
// 上個月 date格式"yyyy-mm-dd" function my_date (date){ let arr = date.split('-'); let y = arr[0] , m = arr[1], d = arr[2]; // 獲取當前的年月日 // ES6語法 let [y,m,d] = arr; let day = new Date(y,m,0); day = day.getDate(); // 獲取當前月份的天數 let y2 = y, m2 = parseInt(m) - 1; if(m2 == 0){ y2 = parseInt(y2) -1; m2 = 12; } let d2 = d, day2 = new Date(y2, m2, 0); day2 = day2.getDate(); if(d2 > day2){ d2 = day2; } if(m2 < 10){ m2 = '0' + m2; } return y2 + '-' + m2 + '-' + d2; } my_date('2018-1-20'); //"2017-12-20"
下個月的計算方法也是類似:
// 上個月 date格式"yyyy-mm-dd" function my_date (date){ let arr = date.split('-'); let y = arr[0] , m = arr[1], d = arr[2]; // 獲取當前的年月日 let day = new Date(y,m,0); day = day.getDate(); // 獲取當前月份的天數 // 和計算上個月的區別 let y2 = y, m2 = parseInt(m) + 1; if(m2 == 13){ y2 = parseInt(y2) + 1; m2 = 1; } let d2 = d, day2 = new Date(y2, m2, 0); day2 = day2.getDate(); if(d2 > day2){ d2 = day2; } if(m2 < 10){ m2 = '0' + m2; } return y2 + '-' + m2 + '-' + d2; } my_date('2018-12-20'); // "2019-01-20"
1.MDN 數字和日期
2. JS日期Date詳解與實例擴展
本部份內容到這結束
Author | 王平安 |
---|---|
pingan8787@qq.com | |
博 客 | www.pingan8787.com |
微 信 | pingan8787 |
每日文章推薦 | https://github.com/pingan8787... |
JS小冊 | js.pingan8787.com |
歡迎關注微信公衆號【前端自習課】天天早晨,與您一塊兒學習一篇優秀的前端技術博文 .