js時間Date對象介紹及解決getTime轉換為8點的問題

來源:互聯網
上載者:User

標籤:

前言

  在做時間轉換的時候,發現用“2016-04-12”轉出來的時間戳記是 2016-04-12 08:00的時間點,而不是0點。

new Date(‘2016-04-12‘).getTime();// 1460419200000 new Date(1460419200000);// Tue Apr 12 2016 08:00:00 GMT+0800

  最後發現,如果將日期格式換成“2016/04/12”,則正常換算成0點。

new Date(new Date(‘2016/04/12‘).getTime());// Tue Apr 12 2016 00:00:00 GMT+0800

概述

  Date對象是JavaScript提供的日期和時間的操作介面。它有多種用法。

  JavaScript內部,所有日期和時間都儲存為一個整數,表示目前時間距離1970年1月1日00:00:00的毫秒數,正負的範圍為基準時間前後各1億天。

Date()

  作為一個函數,Date對象可以直接調用,返回一個當前日期和時間的字串。

Date()// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)" Date(2000, 1, 1)// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)"

  上面代碼說明,無論有沒有參數,直接調用Date總是返回目前時間。

new Date()

  Date對象還是一個建構函式,對它使用new命令,會返回一個Date對象的執行個體。如果不加參數,產生的就是代表目前時間的對象。

  

var today = new Date(); today// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)" // 等同於today.toString()// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)"

  作為建構函式時,Date對象可以接受多種格式的參數。

  (1)new Date(milliseconds)

  Date對象接受從1970年1月1日00:00:00 UTC開始計算的毫秒數作為參數。這意味著如果將Unix時間戳記作為參數,必須將Unix時間戳記乘以1000。

new Date(1378218728000)// Tue Sep 03 2013 22:32:08 GMT+0800 (CST) // 1970年1月2日的零時var Jan02_1970 = new Date(3600 * 24 * 1000);// Fri Jan 02 1970 08:00:00 GMT+0800 (CST) // 1969年12月31日的零時var Dec31_1969 = new Date(-3600 * 24 * 1000);// Wed Dec 31 1969 08:00:00 GMT+0800 (CST)

  上面代碼說明,Date建構函式的參數可以是一個負數,表示1970年1月1日之前的時間。Date對象能夠表示的日期範圍是1970年1月1日前後各一億天。

  (2)new Date(datestring)

  Date對象還接受一個日期文字作為參數,返回所對應的時間。 

new Date("January 6, 2013");// Sun Jan 06 2013 00:00:00 GMT+0800 (CST)

  

  日期文字的完整格式是“Month day, year hours:minutes:seconds”,比如“December 25, 1995 13:30:00”。如果省略了小時、分鐘或秒數,這些值會被設為0。

  但是,其他格式的日期文字,也可以被解析。事實上,所有可以被Date.parse()方法解析的日期文字,都可以當作Date對象的參數

new Date("2013-2-15")new Date(‘2013/2/15‘)new Date("2013-FEB-15")new Date("FEB, 15, 2013")new Date("FEB 15, 2013")new Date("Feberuary, 15, 2013")new Date("Feberuary 15, 2013")new Date("15, Feberuary, 2013") // Fri Feb 15 2013 00:00:00 GMT+0800 (CST)

  上面多種日期文字的寫法,返回的都是同一個時間。

  注意,在ES5之中,如果日期採用連詞線(-)格式分隔,且具有前置0,JavaScript會認為這是一個ISO格式的日期文字,導致返回的時間是以UTC時區計算的。  

new Date(‘2014-01-01‘)// Wed Jan 01 2014 08:00:00 GMT+0800 (CST) new Date(‘2014-1-1‘)// Wed Jan 01 2014 00:00:00 GMT+0800 (CST)

  上面代碼中,日期文字有沒有前置0,返回的結果是不一樣的。如果沒有前置0,JavaScript引擎假設使用者處於本地時區,所以本例返回0點0分。如果有前置0(即如果你以ISO格式表示日期),就假設使用者處于格林尼治國際標準時的時區,所以返回8點0分。但是,ES6改變了這種做法,規定凡是沒有指定時區的日期文字,一律認定使用者處於本地時區。

  對於其他格式的日期文字,一律視為非ISO格式,採用本地時區作為計時標準。

new Date(‘2014-12-11‘)// Thu Dec 11 2014 08:00:00 GMT+0800 (CST) new Date(‘2014/12/11‘)// Thu Dec 11 2014 00:00:00 GMT+0800 (CST)

  上面代碼中,第一個日期文字是ISO格式,第二個不是。

  (3)new Date(year, month [, day, hours, minutes, seconds, ms])

  Date對象還可以接受多個整數作為參數,依次表示年、月、日、小時、分鐘、秒和毫秒。如果採用這種格式,最少需要提供兩個參數(年和月),其他參數都是可選的,預設等於0。因為如果只使用“年”這一個參數,Date對象會將其解釋為毫秒數。

new Date(2013)// Thu Jan 01 1970 08:00:02 GMT+0800 (CST)

  上面代碼中,2013被解釋為毫秒數,而不是年份。

  其他情況下,被省略的參數預設都是0。
  

new Date(2013, 0)// Tue Jan 01 2013 00:00:00 GMT+0800 (CST) new Date(2013, 0, 1)// Tue Jan 01 2013 00:00:00 GMT+0800 (CST) new Date(2013, 0, 1, 0)// Tue Jan 01 2013 00:00:00 GMT+0800 (CST) new Date(2013, 0, 1, 0, 0, 0, 0)// Tue Jan 01 2013 00:00:00 GMT+0800 (CST)

  上面代碼(除了第一行)返回的是2013年1月1日零點的時間,可以看到月份從0開始計算,因此1月是0,12月是11。但是,月份裡面的天數從1開始計算。

這些參數如果超出了正常範圍,會被自動折算。比如,如果月設為15,就折算為下一年的4月。

  

new Date(2013, 15)// Tue Apr 01 2014 00:00:00 GMT+0800 (CST) new Date(2013,0,0)// Mon Dec 31 2012 00:00:00 GMT+0800 (CST)

  參數還可以使用負數,表示扣去的時間。

new Date(2013, -1)// Sat Dec 01 2012 00:00:00 GMT+0800 (CST) new Date(2013, 0, -1)// Sun Dec 30 2012 00:00:00 GMT+0800 (CST)

  上面代碼分別對月和日使用了負數,表示從基準日扣去相應的時間。

  年的情況有所不同,如果為0,表示1900年;如果為1,就表示1901年;如果為負數,則表示公元前。

new Date(0, 0)// Mon Jan 01 1900 00:00:00 GMT+0800 (CST) new Date(1, 0)// Tue Jan 01 1901 00:00:00 GMT+0800 (CST) new Date(-1, 0)// Fri Jan 01 -1 00:00:00 GMT+0800 (CST)
日期的運算

  類型轉換時,Date對象的執行個體如果轉為數值,則等於對應的毫秒數;如果轉為字串,則等於對應的日期文字。所以,兩個日期對象進行減法運算,返回的就是它們間隔的毫秒數;進行加法運算,返回的就是串連後的兩個字串。

var d1 = new Date(2000, 2, 1);var d2 = new Date(2000, 3, 1); d2 - d1// 2678400000 d2 + d1// "Sat Apr 01 2000 00:00:00 GMT+0800 (CST)Wed Mar 01 2000 00:00:00 GMT+0800 (CST)"

 

js時間Date對象介紹及解決getTime轉換為8點的問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.