js關於時間的那些個事兒

昨天看到一則消息,著名前央視大咖李詠去世的消息遍及全網絡。全部人的關注點都在李詠去世這件事兒自己上面,可是我關注的點在於:出事兒原由是由於李詠生前比較愛喝酒。說到喝酒呢?自己喝酒是中華民族的一項傳統習俗,基本每一箇中國人都會喝酒,不管是在春節仍是不少場合裏面酒基本就是調節氣氛最好的催化劑。可是今年二月份的時候,天然曾經發了一篇文章稱:喝酒可能會加大患癌症的概率。固然我也看了一下這篇文章,講的很高深,聽不懂。可是知道了喝酒不對這件事兒。ios

最近在開發的時候遇到了不少奇奇怪怪的需求,主要都跟time相關。我在這裏呢?就着重對js裏面time的一些使用技巧作一下總結吧。 數據庫

時鐘

1、 date的格式化

Date 對象用於處理日期和時間。bash

能夠經過 new 關鍵詞來定義 Date 對象。如下代碼定義了名爲 myDate 的 Date 對象:網絡

let date = new Date(); // Tue Oct 29 2018 21:09:05 GMT+0800 (中國標準時間)
複製代碼

就像上面這種操做。可是Tue Oct 29 2018 21:09:05 GMT+0800這種時間格式對於一個用戶來講是不直觀的,要把其進行處理,使其直觀的展現給用戶進行觀看、查閱或者是給數據庫進行存儲。ui

一、 Date格式化成時間戳

時間戳是程序開發常常會使用的一種存儲方式,這裏咱們能夠直接進行轉換;spa

let date = new Date(); // Tue Oct 29 2018 21:09:05 GMT+0800 (中國標準時間)
let timestamp =Date.parse(date); // 1540818545000
複製代碼

二、 時間戳轉化成Date

前面說到了Date對象轉化成時間戳,這裏也順便說一下時間戳轉化Date對象吧。3d

let date = new Date(1540818545000); //Mon Oct 29 2018 21:09:05 GMT+0800 (中國標準時間)
複製代碼

三、 Date格式化成年月日

不少需求裏面都想要把時間轉化成xxxx年xx月xx日、xxxx-xx-xx等等操做。由於這樣的格式會比較直觀。 來看下面一段代碼:code

let date = new Date();
console.log("year:",date.getFullYear()); // 2018
console.log("month:",date.getMonth()+1); // 10
console.log("day:",date.getDate()); // 29
console.log("hours:",date.getHours()); // 21
console.log("minute:",date.getMinutes()); // 9
console.log("second:",date.getSeconds()); // 5
console.log("millsecond:",date.getMilliseconds()); // 0
複製代碼

這裏值得注意的是:orm

  • month是從0開始計數的,因此須要加上1
  • 獲取天數是getDate()而不是getDay().

好了我講完整的代碼展現出來吧:cdn

function formatDate () {
        let date = new Date()
        let y = date.getFullYear()
        let m = date.getMonth() + 1
        m = m < 10 ? ('0' + m) : m
        let d = date.getDate()
        d = d < 10 ? ('0' + d) : d
        let h = date.getHours()
        h = h < 10 ? ('0' + h) : h
        let minute = date.getMinutes()
        let second = date.getSeconds()
        minute = minute < 10 ? ('0' + minute) : minute
        second = second < 10 ? ('0' + second) : second
        return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + second
      }
複製代碼

四、 年月日轉化成Date()對象.

操做其實很簡單:

let date = new Date("2018-01-01"); // Mon Jan 01 2018 00:00:00 GMT+0800 (中國標準時間)
複製代碼

甚至能夠這樣:

let date = new Date("2018-01"); // Mon Jan 01 2018 08:00:00 GMT+0800 (中國標準時間)
let date5 = new Date("2018-01-01 10:20:25"); // Mon Jan 01 2018 10:20:25 GMT+0800 (中國標準時間)
複製代碼

這裏值得注意的就是,若是這樣傳值:

let date2 = new Date("2018年1月1日"); // Invalid Date
複製代碼

若是你要弄的話 仍是採用xxxx-xx-xx hh:mm:ss的格式才能被認同。

2、 時間的一些高級操做:

一、 獲取明天

function getLastDay(){
  let date = new Date();//獲取當前時間
  date.setDate(date.getDate()+1);//設置天數 +1 天
  return formatDate(date);
}
複製代碼

二、 本週一的時間

function getWeekFristDay(){
  let nowDate = new Date();
  let weekFirstDay = new Date(nowDate - (nowDate.getDay() - 1) * 86400000);// Mon Oct 29 2018 21:09:05 GMT+0800 (中國標準時間)
  return formatDate(weekFirstDay);
}
複製代碼

三、 獲取一週前時間

function getWeekLater(){
  let now = new Date();
  let date = new Date(now.getTime() - 7 * 24 * 3600 * 1000);
  return formatDate(date);
}
複製代碼

四、 兩個日期相差的天數

function dateDifference(sDate1, sDate2) {
   let sDate1 = Date.parse(sDate1);
   let sDate2 = Date.parse(sDate2);
   let dateSpan = sDate2 - sDate1;
   dateSpan = Math.abs(dateSpan);
   iDays = Math.floor(dateSpan / (24 * 3600 * 1000));
   return iDays 
}
複製代碼

3、 Date對象的所有方法:

getDate() 從 Date 對象返回一個月中的某一天 (1 ~ 31)。

getDay() 從 Date 對象返回一週中的某一天 (0 ~ 6)。

getMonth() 從 Date 對象返回月份 (0 ~ 11)。

getFullYear() 從 Date 對象以四位數字返回年份。

getYear() 請使用 getFullYear() 方法代替。

getHours() 返回 Date 對象的小時 (0 ~ 23)。

getMinutes() 返回 Date 對象的分鐘 (0 ~ 59)。

getSeconds() 返回 Date 對象的秒數 (0 ~ 59)。

getMilliseconds() 返回 Date 對象的毫秒(0 ~ 999)。

getTime() 返回 1970 年 1 月 1 日至今的毫秒數。

getTimezoneOffset() 返回本地時間與格林威治標準時間 (GMT) 的分鐘差。

getUTCDate() 根據世界時從 Date 對象返回月中的一天 (1 ~ 31)。

getUTCDay() 根據世界時從 Date 對象返回週中的一天 (0 ~ 6)。

getUTCMonth() 根據世界時從 Date 對象返回月份 (0 ~ 11)。

getUTCFullYear() 根據世界時從 Date 對象返回四位數的年份。

getUTCHours() 根據世界時返回 Date 對象的小時 (0 ~ 23)。

getUTCMinutes() 根據世界時返回 Date 對象的分鐘 (0 ~ 59)。

getUTCSeconds() 根據世界時返回 Date 對象的秒鐘 (0 ~ 59)。

getUTCMilliseconds() 根據世界時返回 Date 對象的毫秒(0 ~ 999)。

parse() 返回1970年1月1日午夜到指定日期(字符串)的毫秒數。

setDate() 設置 Date 對象中月的某一天 (1 ~ 31)。

setMonth() 設置 Date 對象中月份 (0 ~ 11)。

setFullYear() 設置 Date 對象中的年份(四位數字)。

setYear() 請使用 setFullYear() 方法代替。

setHours() 設置 Date 對象中的小時 (0 ~ 23)。

setMinutes() 設置 Date 對象中的分鐘 (0 ~ 59)。

setSeconds() 設置 Date 對象中的秒鐘 (0 ~ 59)。

setMilliseconds() 設置 Date 對象中的毫秒 (0 ~ 999)。

setTime() 以毫秒設置 Date 對象。

setUTCDate() 根據世界時設置 Date 對象中月份的一天 (1 ~ 31)。

setUTCMonth() 根據世界時設置 Date 對象中的月份 (0 ~ 11)。

setUTCFullYear() 根據世界時設置 Date 對象中的年份(四位數字)。

setUTCHours() 根據世界時設置 Date 對象中的小時 (0 ~ 23)。

setUTCMinutes() 根據世界時設置 Date 對象中的分鐘 (0 ~ 59)。

setUTCSeconds() 根據世界時設置 Date 對象中的秒鐘 (0 ~ 59)。

setUTCMilliseconds() 根據世界時設置 Date 對象中的毫秒 (0 ~ 999)。

toSource() 返回該對象的源代碼。

toString() 把 Date 對象轉換爲字符串。

toTimeString() 把 Date 對象的時間部分轉換爲字符串。

toDateString() 把 Date 對象的日期部分轉換爲字符串。

toGMTString() 請使用 toUTCString() 方法代替。

toUTCString() 根據世界時,把 Date 對象轉換爲字符串。

toLocaleString() 根據本地時間格式,把 Date 對象轉換爲字符串。

toLocaleTimeString() 根據本地時間格式,把 Date 對象的時間部分轉換爲字符串。

toLocaleDateString() 根據本地時間格式,把 Date 對象的日期部分轉換爲字符串。

UTC() 根據世界時返回 1997 年 1 月 1 日 到指定日期的毫秒數。

valueOf() 返回 Date 對象的原始值。

4、最後說點值得注意的一點是:

4.一、 部分ios機器上面不識別'-'

解決辦法:

let data = '2017-01-01'
data.replace(/-/g,'/')
複製代碼

只須要將‘-’更換成‘/’就能解決了。

4.二、 toJSON/toISOString

從面的代碼,咱們能夠發現:若是咱們獲取到的時間點是0點的時候,取到的年月日會是前一天的24點。

說在最後

這是我到目前爲止,寫的最簡單的一篇技術文章了。主要是最近項目裏面常常會用到這個,固然可能還有些寫法我短期尚未想到。總之 想到了以後會添加上去的。最近忽然有點不知道該寫什麼了,就只好找一個經常使用的來寫了。時間也差很少了,該講的也差很少了了,鍛鍊去了。

相關文章
相關標籤/搜索