Date 類中一些特殊說明

2021-09-22 19:25:03 字數 2146 閱讀 7517

原文:你可能不知道的 date 類

date 是 js 中的重要的乙個內建物件,其實例主要用於處理時間和日期,其時間基於 1970-1-1 (世界標準時間)起的毫秒數,時間戳長度為 13 位(不同於 unix 時間戳的長度 10 位)。對於日期和時間,我們有無數的使用場景,因此需要特別注意一些細節和約定。

通過 new date() 可以進行例項化,得到乙個 date 物件例項,值得注意的是如果直接執行date(),將得到乙個時間字串。

new date();

new date(value);

new date(datestring);

new date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);

// 以chrome為例

new date();

// mon oct 23 2017 23:38:02 gmt+0800 (cst)

new date(false);

// thu jan 01 1970 08:00:00 gmt+0800 (cst)

new date(0);

// thu jan 01 1970 08:00:00 gmt+0800 (cst)

new date(null);

// thu jan 01 1970 08:00:00 gmt+0800 (cst)

new date('');

// invalid date

new date(undefined);

// invalid date

[firefox]

不支援帶 '-' 的完整時間,比如 new date('2012-07-08 00:00:00') 為無效的值,而 new date('2012-07-08') 是正確的值。

[month]

不同執行環境下的邊界值有差異, chrome 下甚至連負值都能支援。在實際生產環境中,不僅需要考慮時間的展示,還需要考慮其儲存、計算等,因此在特定的場景下,我們需要盡可能考慮到資料庫和瀏覽器中 date 的有效範圍。

以資料庫derby儲存時間為例,其邊界為:

說明邊界值

最小的日期

0001-01-01

最大的日期

9999-12-31

最小的時間

00:00:00

最大的時間

24:00:00

最小的時間戳

0001-01-01-00.00.00.000000

最大的時間戳

9999-12-31-23.59.59.999999

mysql中,其範圍定義為1000-01-01to9999-12-31

js中,時間戳的最小值為-8640000000000000即西元前 271,821 年 4 月 20 日,最大值為8640000000000000,即 275,760 年 9 月 13 日。規範中時間範圍為 1970/1/1 前後100,000,000天。

聽說,2038 年之後時間戳不夠用了。

在計算機應用上,2023年問題可能會導致某些軟體在2023年無法正常工作。所有使用unix時間表示時間的程式都將受其影響,因為它們以自2023年1月1日經過的秒數(忽略閏秒)來表示時間。這種時間表示法在類unix(unix-like)作業系統上是乙個標準,並會影響以其c程式語言開發給其他大部份作業系統使用的軟體。在大部份的32位作業系統上,此「time_t」資料模式使用乙個有正負號的32位元整數(signedint32)儲存計算的秒數。依照此「time_t」標準,在此格式能被表示的最後時間是2023年1月19日03:14:07,星期二(utc)。超過此一瞬間,時間將會被掩蓋(wrap around)且在內部被表示為乙個負數,並造成程式無法工作,因為它們無法將此時間識別為2023年,而可能會依個別實作而跳回2023年或2023年。錯誤的計算及動作可能因此產生。

1、emacscript 語言規範 -

2、mysql 時間範圍 -

3、js 時間戳邊界 -

Date 類中一些特殊說明

原文 你可能不知道的 date 類 date 是 js 中的重要的乙個內建物件,其實例主要用於處理時間和日期,其時間基於 1970 1 1 世界標準時間 起的毫秒數,時間戳長度為 13 位 不同於 unix 時間戳的長度 10 位 對於日期和時間,我們有無數的使用場景,因此需要特別注意一些細節和約定...

C 中一些特殊符號

n 換行 r 回車 t 製表符 b 退格 f 換頁 0 空符號 雙引號 單引號 反斜槓 t 橫向跳到下一製表位置 v 豎向跳格 b 退格 f 走紙換頁 a 鳴鈴 注 有些 ascii 字元是不可列印的。例如退格 另起一行 警報等。c 語言提供了兩種方法來表示這種不可列印字元。第一種方法是使用 asc...

Shell中一些特殊的變數

0 獲取當前執行shell的指令碼名。n獲取當前shell第n個引數,當大於9時,則用花括號括起來,例如 接的引數一空格隔開 獲取當前執行shell指令碼後面接的引數的個數 獲取當前shell指令碼所有傳參的引數。不加引號和 相同 如果加 上引號,如 相同。如果加上引號,如 相同。如果 加上引號 如...