国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

記錄-new Date() 我忍你很久了!

這篇具有很好參考價值的文章主要介紹了記錄-new Date() 我忍你很久了!。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

這里給大家分享我在網(wǎng)上總結(jié)出來的一些知識,希望對大家有所幫助

記錄-new Date() 我忍你很久了!

大家平時在開發(fā)的時候有沒被new Date()折磨過?就是它的諸多怪異的設(shè)定讓你每每用的時候,都可能不小心踩坑。造成程序意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應(yīng)用思考

可惡的四宗罪

1. Safari瀏覽器不兼容YYYY-MM-DD這樣的格式

new Date('2023-1-1');

這行代碼無論在Macbook中還是iPhone中的Safari瀏覽器,返回的都是Invalid Date, Safari瀏覽器目前還理解不了YYYY-MM-DD這樣的格式,只支持YYYY/MM/DD。這就造成你在Windows環(huán)境下的代碼正常原型,而你的其他部分用戶異常顯示;

2、月份的索引是以0為起點的,而年份、日期卻不是

new Date(2023,1,1);

得到的是一個反直覺的結(jié)果:2023年2月1日!?。?/span>

Wed Feb 01 2023 00:00:00 GMT+0800 (中國標(biāo)準(zhǔn)時間)

同樣的,對應(yīng)的方法.setMonth()也是從0開始設(shè)置的。就……很無語!

3、年份小于100,默認(rèn)以19xx或20xx開頭

一般的應(yīng)用可能碰不到這樣的情況,畢竟現(xiàn)在是21世紀(jì)了,我們在應(yīng)用中看到的大部分時間都是現(xiàn)代的。但是當(dāng)你需要格式化公元元年-公元100年之間的時間,你就該懵了!

舉個栗子:

new Date(2023,1,1);

能正常返回時間對象

Wed Feb 01 2023 00:00:00 GMT+0800 (中國標(biāo)準(zhǔn)時間)

但是當(dāng)年份調(diào)到了東漢時期,公元50年2月1日

new Date(50,2,1);

恭喜你,你直接迎接了新中國!見證了歷史:

Wed Mar 01 1950 00:00:00 GMT+0800 (中國標(biāo)準(zhǔn)時間)

是的,Date直接幫你加了1900年的時間!如果需要獲得公元50年2月1日,得這么寫

new Date('0050-02-01');

返回:

Tue Feb 01 0050 08:05:43 GMT+0805 (中國標(biāo)準(zhǔn)時間)

請千萬不要嘗試添加時間,因為你又要裂開了……

new Date('0050-02-01 00:00:00');

返回:

Wed Feb 01 1950 00:00:00 GMT+0800 (中國標(biāo)準(zhǔn)時間)

你就說,它任性吧?!別氣餒,別忘了標(biāo)題還有20xx的情況

new Date('10-11-12');

返回:

Thu Oct 11 2012 00:00:00 GMT+0800 (中國標(biāo)準(zhǔn)時間)

就是說,當(dāng)年份為2位數(shù)的時候,這種字符串格式的,構(gòu)造函數(shù)把最后面那個當(dāng)作年份,而且默認(rèn)它為20xx年

4、日期初始化不統(tǒng)一,存在時區(qū)差異

你相信嗎?'2018-01-01'和'2018/01/01'是不同的,存在一定時差

new Date('2018-01-01');

返回:

Mon Jan 01 2018 08:00:00 GMT+0800 (中國標(biāo)準(zhǔn)時間)

然而……

new Date('2018/01/01');

返回:

Mon Jan 01 2018 00:00:00 GMT+0800 (中國標(biāo)準(zhǔn)時間)

看到差異了嗎?兩種格式返回的時間是不同的,查了個北京時間與格林尼治時間的時差,8個小時??!

應(yīng)用思考

在日常開發(fā)中,我們應(yīng)用new Date()無非就是對時間運算及時間的格式化。

1. 時間的計算

需要方便對比兩個時間的早晚,可以分別對年份、月份、日期、小時等進(jìn)行單獨比較。而我們現(xiàn)有的操作還比較麻煩。

比如,我想知道2003年7月13日北京申奧成功到2008年8月8日北京奧運開幕中間差了幾天,如何快速計算?這樣的計算在日常開發(fā)中還比較常見,特別是電商網(wǎng)站對搶購環(huán)節(jié)的倒計時。

還有諸如,當(dāng)前時間在100天以后又是幾月幾號呢?

2. 時間的比較

給定兩個時間,判斷哪個在前,哪個在后;給定一個時間返回,判斷某個時間是不是在這兩者之間。

3. 時間的格式化

在網(wǎng)站開發(fā)中,我們最常見的就是對后臺返回時間戳的格式化顯示。而原生帶來的僅有年份如何獲取,月份如何獲取,日期如何獲取的方法,就方便的無非就是toISOString()這樣的方法,但是返回的卻不一定是你要的格式。如何快速實現(xiàn)自定義格式化字符串,這也是一門技術(shù)。

困境的解決

想必大家日常中也用過 moment.js、dayjs、data-format這些工具吧?確實挺好用的,我也就順便說一下而已。因為我要開始打廣告了……面對著new Date()各種無語的坑,我慢慢的也弄了一個不大的庫(250行左右代碼)。

你要說我的庫和前面的幾個庫對比,有啥改進(jìn)的或者有啥特點的嗎?

??確實也沒有,我只是想用自己造的“輪子”,走自己路。它更符合我自己的使用習(xí)慣罷了

【項目開源地址】github.com/mumuy/datex

【項目演示地址】passer-by.com/datex/

提供的方法足以解決以上“四宗罪”及日常應(yīng)用。它提供多種初始化時間的方式:

實例化對象

// 通過時間戳
datex(123456789);

// 通過多個參數(shù)初始化
datex(2018,8,8);

// 通過時間字符串初始化
datex('2018-08-08');
datex('2018-04-04T16:00:00.000Z');

// 通過時間對象初始化
datex({year:2008,month:8,day:8,hour:8,minute:0,second:0});

// 通過時間數(shù)組初始化
datex([2018,8,8,8,8,0]);

// 無參數(shù)初始化
datex();

時間戳及克隆

// 返回時間戳(毫秒)
datex().getTime();

// 返回時間戳(秒)
datex().getUnix();

// 克隆
datex().clone();

時間對象輸出

// 返回原生Date對象
datex().toDate();

// 返回時間字段對象
datex().toObject();

// 返回時間字段數(shù)組
datex().toArray();

// 返回字符串
datex().toString();

// 返回ISO字符串
datex().toISOString();

時間格式化

datex(123456789).format('YYYY-MM-DD');

時間計算及比較

// 設(shè)置某字段值
datex(2022,10,1).set('year',2020).format();

// 增減某字段值,負(fù)值為減
datex(2022,10,1).change('year',1).format();

// 返回某字段值
datex().get('month');

// 獲取某字段起始時
// 例如:獲取這個月初是星期幾?
datex().startOf('month').format('W');

// 獲取某字段末尾時
// 例如:獲取這個月有多少天?(是不是很容易理解?end of month then get day!)
datex().endOf('month').get('day');

// 與某時間點差值
// 例如:北京2008年奧運會開幕式過去多少天了?
datex().diffWith('2008-8-8','day');

// 是否在某個時間點之前
datex('2008-08-08').isBefore('2022-02-02');

// 是否在某個時間點之后
datex('2008-08-08').isAfter('2022-02-02');

// 是否和某個時間點相等
datex('2008-08-08').isSame('2018-02-02','year');

// 是否在兩個時間點之間
datex('2008-08-08').isBetween('2003-07-13','2022-02-02');

有效性

datex('2008-13-12').isValid();

本文轉(zhuǎn)載于:

https://juejin.cn/post/7221884988492382267

如果對您有所幫助,歡迎您點個關(guān)注,我會定時更新技術(shù)文檔,大家一起討論學(xué)習(xí),一起進(jìn)步。

?記錄-new Date() 我忍你很久了!文章來源地址http://www.zghlxwxcb.cn/news/detail-418508.html

到了這里,關(guān)于記錄-new Date() 我忍你很久了!的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 安卓和ios針對于new Date()數(shù)據(jù)格式的兼容問題

    IOS 手機不識別 YYY-MM-DD HH:mm:ss 格式的日期傳參。 在項目中需要實現(xiàn)倒計時,這個倒計時的時間是后端同學(xué)給到前端的,我們針對當(dāng)前時間到結(jié)束的時,進(jìn)行倒計時,這個功能在測試的時候安卓手機和iOS手機都沒問題,但是哦生產(chǎn)有用戶反饋ios手機無法出現(xiàn)倒計時 發(fā)現(xiàn)是ios低版本的情

    2024年02月04日
    瀏覽(20)
  • node debian 鏡像 new Date 獲取時間少 8 小時問題

    在 node debian 鏡像中,用 (new Date()).getHours() 與系統(tǒng)時間(東 8 區(qū))少了 8 小時 系統(tǒng)時間 容器中的時間 原 Dockerfile 鏡像運行起來容器未設(shè)置指定時區(qū) Dockerfile 中添加 ENV TZ=\\\'Asia/Shanghai\\\' 及 apt-get install -yq tzdata 系統(tǒng)時間 容器中的時間 https://dev.to/0xbf/set-timezone-in-your-docker-image-d22

    2024年02月14日
    瀏覽(16)
  • JavaScript獲取時間(js中的new Date(),獲取前7天時間)

    JavaScript獲取時間(js中的new Date(),獲取前7天時間)

    簡述:我們在寫Echarts的時候,難免會用到j(luò)s中的new Date(),用來獲取時間, 今天就來分享下它的用法,順便做下筆記。 關(guān)于new Date()的一些js方法: 輸出: 1、 獲取前一段時間的日期 難點: 這里用到了setDate()方法,該方法用于實現(xiàn)日期的相加減,它接收一個整數(shù),如果這個整

    2024年02月09日
    瀏覽(31)
  • 微信小程序 IOS中new Date()時間格式不兼容問題

    問題描述: 最近在小程序項目中遇到了處理Date時間格式的需求,在Android手機測試是沒有發(fā)現(xiàn)問題的,但是在IOS上 時間轉(zhuǎn)換出現(xiàn)了錯誤。 解決方案: 這里主要兼容問題在于Android可以處理 ‘-’ 與 ‘/’ ,而IOS只能處理 ‘/’ 的時間格式,具體如下: 總結(jié): 這里需要注意的

    2024年02月13日
    瀏覽(19)
  • JavaScript中的時間日期函數(shù)new Date()(JS中5種獲取時間戳的函數(shù))

    簡介: JavaScript 中的 new Date() 方法用于創(chuàng)建一個新的 Date 對象,該對象表示當(dāng)前日期和時間。Date 對象提供了許多方法和屬性,可以用于獲取和設(shè)置日期和時間信息。 new Date([year, month, day, hour, minute, second, millisecond]) 其中,每個參數(shù)都是可選的。如果沒有指定參數(shù),則 new Dat

    2024年02月04日
    瀏覽(31)
  • 踩坑:小程序 new Date(“YYYY-MM-DD hh:mm:ss”)在ios手機上顯示null

    一、發(fā)現(xiàn)問題: 蘋果手機上進(jìn)入小程序,點擊picker組件選擇時間日期(YYYY-MM-DD hh:mm:ss),用new Date(“YYYY-MM-DD hh:mm:ss”)轉(zhuǎn)化時間格式進(jìn)行比較時,變量轉(zhuǎn)化后的結(jié)果為null 二、解決方案: 三、分析并查找原因: 1.在IOS中,new Date中指定的字符串還有格式,new Date(“YYYY/MM/DD hh:

    2024年02月12日
    瀏覽(27)
  • JavaScript 中 new Date() 生成的日期格式轉(zhuǎn)換為 ‘yyyy-MM-dd HH:mm:ss‘ 格式的字符串

    1、使用 Date 對象自帶的方法 可以使用 Date 對象自帶的方法來獲取日期字符串的各個部分,然后將它們拼接成目標(biāo)格式的字符串: 2、使用第三方庫 也可以使用第三方庫來格式化日期字符串,如 moment.js: 或者使用 ES6 的模板字符串和 Date 對象自帶的方法:

    2024年02月16日
    瀏覽(32)
  • element UI中的el-date-picker日期選擇的日期偏差問題記錄

    element UI中的el-date-picker日期選擇的日期偏差問題記錄

    el-date-picker日期選擇的的日期和輸出的日期不相同 錯誤的代碼 沒問題的代碼 注: yyyy-MM-dd 和 yyyy-MM-DD 大小寫一定要注意,忘記了 一定要看清楚文檔!?。?/p>

    2024年04月11日
    瀏覽(26)
  • 你以為你很優(yōu)秀,但卻面試屢屢失敗?

    二哥,最近我在參加面試,但遇到了一個很尷尬的現(xiàn)實:我以為自己很優(yōu)秀,但面試官好像對我有偏見,面試屢屢失敗,現(xiàn)在有點心慌了,我該怎么辦呢? 以上是讀者小利問我的一個問題,我覺得挺值得認(rèn)真分析一下的。在回答問題之前,我先來說一件事。 去年的這個時候

    2024年02月08日
    瀏覽(64)
  • 作為程序員,你很有必要了解一下IVX

    作為程序員,你很有必要了解一下IVX

    iVX 是一個“零代碼”的可視化編程平臺,擁有方便的在線集成開發(fā)環(huán)境,不需要下載開發(fā)環(huán)境,打開瀏覽器即可隨時隨地進(jìn)行項目編輯。iVX 還擁有“一站式”的云資源,通過這一套一站式服務(wù),iVX 可以實現(xiàn)一站式研發(fā)、一站式部署、一站式維護(hù)。iVX相當(dāng)于“一款零代碼可視

    2024年02月15日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包