Date 物件
JavaScript 並沒有日期的資料類型。不過你可以在你的應用程式中使用 Date
物件及其方法來使用日期和時間。Date
物件有非常大量的方法可用來設定、取得、操作日期。不過沒有任何的屬性。
JavaScript 處理日期的方式很類似 Java。這兩個語言有很多同樣的日期方法,而且這兩個語言都是以 1970 年 1 月 1 日 00:00:00 開始的毫秒數來儲存日期。
Date 物件的範圍是以 1970 年 1 月 1 日 (UTC) 為基準,從 -100,000,000 日一直到 100,000,000 日。
如下建立 Date
物件︰
dateObjectName = new Date([parameters])
此處的 dateObjectName
就是將要建立的 Date
物件的名稱;他可以是新的物件或是既存物件的屬性。
前敘語法中的 parameters
可以是下列的任何一種形式︰
- 沒有參數︰建立今天的日期和時間。例如,
today = new Date()
。 - 以此格式表示日期的字串︰"月 日, 年 時:分:秒"。例如,
Xmas95 = new Date("December 25, 1995 13:30:00")
。如果你省略了時、分、秒,這些值會被設為零。 - 一組年、月、日的整數值。例如,
Xmas95 = new Date(1995,11,25)
。 - 一組年、月、日、時、分、秒的整數值。例如,
Xmas95 = new Date(1995,11,25,9,30,0)
。
JavaScript 1.2 及早期版本
Date
物件的行為如下︰
- 不允許使用 1970 年以前的日期。
- JavaScript 依靠平台特有的日期之便及其行為;平台與平台之間,
Date
物件的行為有所不同。
Date 物件的方法
用於處理日期和時間的 Date
物件的方法主要可分為這幾類︰
- "set" 方法,用於設定
Date
物件的日期和時間的值。 - "get" 方法,用於取得
Date
物件的日期和時間的值。 - "to" 方法,用於從
Date
物件返回字串值。 - parse 和 UTC 方法,用於分析
Date
字串。
使用 "get" 和 "set" 方法,你可以分別取得或設定秒、分、時、日、星期、月、年。還有 getDay
方法可返回星期,但沒有相對應的 setDay
方法,因為星期會自動設定。這些方法使用整數來表示如下的這些值︰
- 秒和分︰0 至 59
- 時︰0 至 23
- 星期︰0(星期日)至 6(星期六)
- 日︰1 至 31(月份裡的某一日)
- 月︰0(一月)至 11(十二月)
- 年︰從 1900 年起
舉例來說,假設你定義了如下日期︰
Xmas95 = new Date("December 25, 1995")
Xmas95.getMonth()
返回 11,而 Xmas95.getFullYear()
返回 1995。
getTime
和 setTime
方法對於日期的比較來說很有用。getTime
方法返回自 1970 年 1 月 1 日 00:00:00 以來的毫秒數。
例如,下面的代碼顯示今年的剩餘天數︰
today = new Date() endYear = new Date(1995,11,31,23,59,59,999) // 設定日和月 endYear.setFullYear(today.getFullYear()) // 設定為今年 msPerDay = 24 * 60 * 60 * 1000 // 一天的毫秒數 daysLeft = (endYear.getTime() - today.getTime()) / msPerDay daysLeft = Math.round(daysLeft) // 返回今年的剩餘天數
本範例建立了名為 today 的 Date
物件,其中內含有今天的日期。然後,使用一天的毫秒數,計算今天和 endYear
之間的天數,使用 getTime
並捨入為天數。
The parse
方法對於把值從日期字串代入到既存的 Date
物件來說很有用。例如,下面的代碼使用 parse
和 setTime
把日期的值代入到 IPOdate
物件︰
IPOdate = new Date() IPOdate.setTime(Date.parse("Aug 9, 1995"))
Date 物件的使用︰範例
在下面的範例中,函數 JSClock()
返回以數位時鐘為格式的時間。
function JSClock() { var time = new Date() var hour = time.getHours() var minute = time.getMinutes() var second = time.getSeconds() var temp = "" + ((hour > 12) ? hour - 12 : hour) if (hour == 0) temp = "12"; temp += ((minute < 10) ? ":0" : ":") + minute temp += ((second < 10) ? ":0" : ":") + second temp += (hour >= 12) ? " P.M." : " A.M." return temp }
JSClock
函數首先建立稱為 time
的新 Date 物件;因為沒有提供參數,time 會以今天的日期和時間來建立。然後呼叫 getHours
、getMinutes
、getSeconds
方法把時、分、秒的值代入到 hour
、minute
、second
。
以下的四個語句會以 time 為基準建立字串。第一個語句建立變數 temp
,使用條件表達式把值代入;如果 hour
大於 12,就會是 (hour - 12),否則會是單純的 hour,除非 hour 為 0,這時就會是 12。
下一個語句把 minute
的值附加到 temp 裡。如果 minute
的值小於 10,條件表達式就會加上前置為零的字串;否則加上分隔用分號的字串。接下來的語句把秒的值以同樣方式附加到 temp。
最後,如果 hour
大於 12,條件表達式就把 "PM" 附加到 temp;否則就把 "AM" 附加到 temp
。