国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

你可能不知道的 Date 類

missonce / 1786人閱讀

摘要:構造函數通過可以進行實例化,得到一個對象實例,值得注意的是如果直接執行,將得到一個時間字符串。依照此標準,在此格式能被表示的最后時間是年月日,星期二。錯誤的計算及動作可能因此產生。

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

1. 構造函數

通過 new Date() 可以進行實例化,得到一個 Date 對象實例,值得注意的是如果直接執行 Date() ,將得到一個時間字符串。

new Date();
new Date(value);
new Date(dateString);
new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);

其中對構造函數的參數說明(參考 MDN ):

如果沒有輸入任何參數,則Date的構造器會依據系統設置的當前時間來創建一個Date對象。

如果提供了至少兩個參數,其余的參數均會默認設置為1(如果沒有提供day參數)或者0。

JavaScript的時間是由世界標準時間(UTC)1970年1月1日開始,用毫秒計時,一天由86,400,000毫秒組成。Date對象的范圍是-100,000,000天至100,000,000天(等效的毫秒值)。

JavaScript的Date對象為跨平臺提供了統一的行為。時間屬性可以在不同的系統中表示相同的時刻,而如果使用了本地時間對象,則反映當地的時間。

JavaScript 的Date對象提供了數個UTC時間的方法,也相應提供了當地時間的方法。UTC,也就是我們所說的格林威治時間,指的是time中的世界時間標準。而當地時間則是指執行JavaScript的客戶端電腦所設置的時間。

以一個函數的形式來調用JavaScript的Date對象(i.e., 不使用 new 操作符)會返回一個代表當前日期和時間的字符串。

2. 空值處理
// 以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
3. 特別提示

[Firefox]

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

[month]

new Date(year, month, ……) 中的month從0開始計算

4. 值的邊界

不同執行環境下的邊界值有差異, 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 天。

5. 2038 年蟲

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

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

實際上參考第 4 部分,Date 的上限綽綽有余,大家可以拿起手頭的設備測試一下 2038 年會出現怎樣的異狀。

6. 參考

1、EmacScript 語言規范 - http://ecma-international.org/ecma-262/5.1/#sec-15.9
2、Mysql 時間范圍 - https://dev.mysql.com/doc/refman/5.5/en/datetime.html
3、JS 時間戳邊界 - https://stackoverflow.com/questions/11526504/minimum-and-maximum-date

7. 庫

moment - 重量級時間處理庫,支持時間解析、格式化、計算等,功能強大,支持瀏覽器和 Node.js,壓縮后體積約為 16.3 KB

date-fns - 較 moment 更輕量級的事件處理庫,體積更小

dayjs - 更輕量級的 moment.js

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/97692.html

相關文章

  • Java 包(package)介紹

    摘要:實際上,一個完整的類名就是包名與類名的組合。例如一個文件內容如下這表示和都屬于這個包,它們的完整類名分別是和。包就是文件夾包代表的是一種樹形結構的路徑,而在操作系統和壓縮包當中,路徑都是以文件夾的形式展現的。 1. 為什么 Java 會有包的概念? 我們知道 Class(類)是 Java 中的一等公民,所有的 Java 代碼,都要寫在類里面。 我們也知道,在命名規則下,你可以給類起任何...

    Sanchi 評論0 收藏0
  • 如何看待Spring下單例模式與線程安全矛盾

    摘要:線程安全問題都是由全局變量及靜態變量引起的。常量始終是線程安全的,因為只存在讀操作。局部變量是線程安全的。有狀態對象,就是有實例變量的對象,可以保存數據,是非線程安全的。 前言 有多少人在使用Spring框架時,很多時候不知道或者忽視了多線程的問題? ??因為寫程序時,或做單元測試時,很難有機會碰到多線程的問題,因為沒有那么容易模擬多線程測試的環境。那么當多個線程調用同一個bean的時...

    dinfer 評論0 收藏0
  • 如何看待Spring下單例模式與線程安全矛盾

    摘要:線程安全問題都是由全局變量及靜態變量引起的。常量始終是線程安全的,因為只存在讀操作。局部變量是線程安全的。有狀態對象,就是有實例變量的對象,可以保存數據,是非線程安全的。 前言 有多少人在使用Spring框架時,很多時候不知道或者忽視了多線程的問題? ??因為寫程序時,或做單元測試時,很難有機會碰到多線程的問題,因為沒有那么容易模擬多線程測試的環境。那么當多個線程調用同一個bean的時...

    劉永祥 評論0 收藏0
  • 【譯】State and Lifecycle (State和生命周期)

    摘要:結果如下打開試試下一步,我們將把組件功能自己設置定時器并且能每秒更新。這是一個設置定時器的好地方注意我們是怎么保存定時器的。我們將在這個生命周期的函數方法中卸載掉定時器最后,我們會每一秒跑方法。 下面是react官方文檔的個人翻譯,如有翻譯錯誤,請多多指出原文地址:https://facebook.github.io/re... Consider the ticking clock e...

    dadong 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<