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

資訊專欄INFORMATION COLUMN

Javascript時間構造的詭異

banana_pi / 2098人閱讀

摘要:為我們提供了不是很好用的作為時間日期對象,除了接口設計怪異之外,還有一些隱藏很深的,先看接口設計直接返回當前時間字符串,無參數。可接受一個數字參數,該參數表示與年月日點之間的毫秒數。可接受年月日時分秒參數,是本地時間。付出慘痛的代價。

JavaScript為我們提供了不是很好用的Date作為時間日期對象,除了接口設計怪異之外,還有一些隱藏很深的bug,先看接口設計:

Date()直接返回當前時間字符串,無參數。

new Date()則是會根據參數來返回對應的時間對象,參數很有意思:

// 無參數,并返回當前時間。
new Date();
// 可接受一個數字參數,該參數表示與1970年1月1日0點之間的毫秒數。
new Date(value);
// 可接受一個字符串參數,參數形式類似于Date.parse()方法。
new Date(dateString);
// 可接受年月日時分秒參數,是本地時間。
new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);

先且不說這樣的接口未免不夠靈活(很難處理各種字符串格式的時間),最詭異的一點是其中使用dateString的那個構造方法,MDN網站在這個函數下有下面一段注釋:

注意這里用的是strongly discouraged - 強烈不推薦使用,原先的我沒有重視這句話,直到。。。付出慘痛的代價。

現象

我的一款每日打卡類的App,因為有大量的時間運算,為了能接受各種時間,我做了一個方便的函數:

date2ymd(input) {
    let day = (input instanceof Date) ? input : new Date(input)
    return `${day.getFullYear()}-${day.getMonth() + 1}-${day.getDate()}`
}

上面的函數在某些input時沒有問題,但當參數為類似’2018-10-1’這種格式,按照MDN的文檔,就屬于強烈不推薦使用的形式,但我沒有留意,App發布之后,不錯,大部分用戶沒有反饋問題,直到某天,一個阿根廷的用戶給我郵件反饋,說界面上的日歷似乎錯亂了,我試著更改自己的時區到對應的-3時區,截圖一看:

上圖中彩色小方塊的區域是年視圖,本來應該和下面的日歷一一對應,但在這個時區下,年視圖完全錯位了,肯定是哪里計算錯誤了,經過調試,我找到了上面這個函數,并發現了問題,我們用chrome的console演示一下:

看到了嗎? 從9號到10號,轉換出的時間沒有翻天,當然,我們可以為這種轉換找到理由,JS應該是把這種參數當成UTC時間了,我們看看firefox:

Firefox的表現可以理解,因為UTC和-3:00時區之間有個時間差,雖然這依然不是我想要的,但比起chrome的跳變要好接受一些,我們把輸入時間換一個格式,再看下在chrome下的例子:

這種格式終于符合了正常邏輯,也就是短杠和斜杠分隔的時間處理上是不一致的,斜杠分隔的時間終于正確的按照了本地時間進行處理。

結論

正如MDN所說,不要使用單字符串參數的Date構造函數,即使你知道各種格式之間的區別,也不建議使用,畢竟記憶這些微妙,甚至不兼容的差別毫無意義。

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

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

相關文章

  • 你是否理解jsObject與Function與原型鏈

    摘要:原型對象是由創建的,因此原型對象的構造函數是構造函數也可以是稱為對象,原型對象也就繼承了其生父構造函數中的數據,也同時繼承了原型對象的數據。當然這條原型鏈中的數據,會被還是還是這類構造函數繼承,但是不會被這些繼承,他們不處于同一個鏈條上。 js中,Function的本質是什么?Object的本質又是什么?js中有幾條原型鏈? showImg(https://segmentfault.c...

    itvincent 評論0 收藏0
  • 四個最詭異 CSS 特性

    摘要:作為一個創始人拍腦袋天搞出的語言,中包含了很多在今天看來很多不應該出現在現代語言中的詭異特性。今天我就來聊聊我認為的那些最詭異的特性。和有個很詭異的特性。外邊距折疊,或簡稱邊距折疊據說這個詭異的特性最初設計是為簡化文章排版的。 JavaScript 作為一個創始人拍腦袋 10 天搞出的語言,JS 中包含了很多在今天看來很多不應該出現在現代語言中的詭異特性。其實,作為 Web 中必不可少...

    yunhao 評論0 收藏0
  • 一次詭異關于filter問題

    摘要:接收前臺請求封裝的時,莫名傳到后臺就變成了。找了半天,一直以后是前臺的問題,一直在翻閱各種代碼。后來,請教大佬,大佬一聽到剛好少了后,靈光乍現,感覺是攔截器的原因,后來查閱,果不其然。全稱跨站腳本攻擊,是程序中最常見的漏洞。 接收前臺post請求封裝的versionDescription:eeeeee,時,莫名傳到后臺就變成versionDeion:eeeeee,了。 找了半天,一直...

    BlackHole1 評論0 收藏0
  • 關于“時間一次探索

    摘要:示例指定了也就是零時區,顯示的時間會加上本地時區的偏移小時。其實就是上面顯示時間時使用的形式除了能表示基本信息,還可以表示星期,但是一點也不容易讀,不建議使用。 原文對 ISO 8601 時間格式中 T 和 Z 的表述有一些錯誤,我已經對原文進行了一些修訂,抱歉給大家造成誤解。 最近使用 sequelize 過程中發現一個奇怪的問題,將某個時間插入到表中后,通過 sequelize 查...

    fuyi501 評論0 收藏0

發表評論

0條評論

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