1. 程式人生 > >javascript中關於日期和時間的基礎知識

javascript中關於日期和時間的基礎知識

前面的話

  在介紹Date物件之前,首先要先了解關於日期和時間的一些知識。比如,閏年、UTC等等。深入瞭解這些,有助於更好地理解javascript中的Date物件。本文將介紹javascript關於日期和時間的基礎知識

標準時間

  一般而言的標準時間是指GMT和UTC,以前是GMT,現在是UTC

GMT

  格林尼治標準時間(GMT)是指位於倫敦郊區的皇家格林尼治天文臺的標準時間,因為本初子午線被定義在通過那裡的經線

  理論上來說,格林尼治標準時間的正午是指當太陽橫穿格林尼治子午線時(也就是在格林尼治上空最高點時)的時間。由於地球在它的橢圓軌道里的運動速度不均勻,這個時刻可能和實際的太陽時相差16分鐘

  地球每天的自轉是有些不規則的,而且正在緩慢減速。所以,格林尼治時間已經不再被作為標準時間使用。現在的標準時間由世界協調時間(UTC)提供

UTC

  世界協調時間(UTC)又稱世界統一時間,世界標準時間,國際協調時間,全稱Coordinated Universal Time,是以原子時秒長為基礎,在時刻上儘量接近於世界時的一種時間計量系統 

  這套時間系統被應用於許多網際網路和全球資訊網的標準中,中國大陸、中國香港、中國澳門、中國臺灣、蒙古國、新加坡、馬來西亞、菲律賓、西澳大利亞州的時間與UTC的時差均為+8,也就是UTC+8

  在軍事中,協調世界時區會使用“Z”來表示。又由於Z在無線電聯絡中使用“Zulu”作代稱,協調世界時也會被稱為"Zulu time"

日期時間字串格式

  ECMAScript定義了一個基於簡化的ISO8601擴充套件格式的日期時間的字串互換格式

  日期時間完整格式為:  YYYY-MM-DDTHH:mm:ss.sssZ

  [注意]前置0不能省略,否則在完整格式的情況下會報錯

YYYY        公曆中年的十進位制數字,如果這個引數值在0-99之間,則向它加上1900
-           在字串中直接以“-”(破折號)出現兩次
MM          一年中的月份,從01(一月)到12(十二月)
DD          月份中的日期,從01到31
T           在字串中直接以“T”出現,用來表明時間元素的開始
HH          用兩個十進位制數字表示的,自午夜0點以來的小時數
:           在字串中直接以“:”(冒號)出現兩次
mm          是用兩個十進位制數字表示的,自小時開始以來的分鐘數
ss          是用兩個十進位制數字表示的,自分開始以來的秒數
.           在字串中直接以“.”(點)出現
sss         是用三個十進位制數字表示的,自秒開始以來的毫秒數
Z           是時區偏移量,由(“Z”(指UTC)或“
+”或“-”)和後面跟著的時間表達式hh:mm組成

  只表示日期的格式:  YYYY YYYY-MM YYYY-MM-DD

  [注意]所有數字必須是10進位制的。如果缺少MM或DD欄位,用“01”作為它們的值。如果缺少mm或ss欄位,用“00”作為它們的值,對於缺少的sss用“000”作為它的值。對於缺少的時區偏移量用“Z”

閏年

  年分為閏年和平年,平年有365天,閏年有366天,閏年的2月比平年多一天

  閏年的定義是(可被4整除)且((不可被100整除)或(可被400整除))的年份

  口訣是:四年一閏,百年不閏,四百年再閏

function IsLeapYear(year){
    if(typeof year == 'number'){
        if((year % 4 === 0 && year % 100 !== 0)  || year % 400 === 0){
            return 'leap year'
        }else{
            return 'common year'
        }
    }
    return 'please input number'
}
console.log(IsLeapYear(4));//'leap year'
console.log(IsLeapYear(400));//'leap year'
console.log(IsLeapYear(2000));//'leap year'
console.log(IsLeapYear(1900));//'common year'

月日

  一年有12個月,其中4、6、9、11月每月有30天;如果是閏年,2月有29天,否則 ,2月有28天。1、3、5、7、8、10、12月每月有31天

  在javascript中,月的計算從0開始,所以1-12月,分別用0-11來表示;而日的計算則從1開始,1就代表第1天,以此類推

if(month == 2){
    //如果是閏年
    if((year % 4 === 0 && year % 100 !== 0)  || year % 400 === 0){
        days = 29;
    //如果是平年
    }else{
        days = 28;
    }
//如果是第4、6、9、11月
}else if(month == 4 || month == 6 ||month == 9 ||month == 11){
    days = 30;
}else{
    days = 31;
}

  在javascript中,月份的簡寫經常在日期字串中使用

一月       Jan January
二月       Feb February
三月       Mar March
四月       Apr April
五月       May May
六月       Jun June
七月       Jul July
八月       Aug August
九月       Sep September
十月       Oct October
十一月     Nov November
十二月     Dec December

星期

  星期是從星期日開始,到星期六結束,分別用0-6來表示

  在javascript中,各星期的簡寫經常在日期字串中使用

星期日    sunday         Sun
星期一    monday         Mon
星期二    Tuesday        Tue
星期三    Wednesday      Wed
星期四    Thursday       Thu
星期五    Friday        Fri
星期六    Saturday       Sar

時分秒

    1天 = 24小時 = 24*60(1440)分 = 24*60*60(86400)秒 = 86,400,000毫秒
    1分= 60秒
    1小時 = 3600秒
    1天 = 86400秒

  Date物件返回的是一個毫秒數,經常需要將其換算成時分秒的形式

date = 100000s
day(天) = Math.floor(100000/86400) = 1
hour(小時) = Math.floor((100000%86400)/3600) = 3
minute(分) = Math.floor((100000%3600)/60) = 46
second(秒) = Math.floor(100000%60)=40
console.log(100000 === 1*86400+ 3*3600+ 46*60+40);//true