日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

js 获得明天0点时间戳_需要知道的JS的日期知识,都在这了

發布時間:2025/3/15 javascript 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js 获得明天0点时间戳_需要知道的JS的日期知识,都在这了 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
譯文 |?https://github.com/qq449245884/xiaozhi/issues/66原文 |?https://css-tricks.com/everything-you-need-to-know-about-date-in-javascript/JS中的?Date?很奇怪。當我們需要處理日期和時間的時候比較麻煩,經常借助像date-fns和?Moment這樣的庫。但是我們并不總是需要使用庫。如果知道要注意一些總是,日期實際上可以非常簡單。接下介紹有關Date對象的所有信息

時區

我們的世界有數百個時區。在JavaScript中,我們只關心兩個,?本地時間和協調世界時(UTC)。
  • 本地時間是指你的計算機所在的時區。

  • UTC實際上是格林威治標準時間(GMT)的同義詞

默認情況下,JS中的幾乎每個日期方法(除了一個)都是本地時間。只有指定UTC,才能獲得 UTC 時間 。

創建日期

可以使用?new Date()來創建日期,傳入的參數通常有4種常用的方式:
  • 使用日期字符串參數

  • 使用一系列的參數

  • 時間戳參數

  • 不帶參數

  • 使用日期字符串參數

    new Date('1988-03-21')這種方式方便且直觀。如果現在寫的是21-03-1988,我們可以毫不費力想表達的是1988年3月21日。但是如果用JS 編寫21-03-1988,則會得到無效的日期。這是有原因的。在世界的不同地方以不同的方式解釋日期字符串。例如11-06-2019是2019年6月11日還是?2019年11月6日。你不能確定我指的是哪一個,除非你知道我正在使用的日期系統。在JS中,如果要使用日期字符串參數,則需要使用全球都能接受的格式,其中一種格式是ISO 8601擴展格式。// ISO 8601 Extended format`YYYY-MM-DDTHH:mm:ss:sssZ`
    • YYYY:4位數年份

    • MM:兩位數月份(即 1月為01,12月為12)

    • DD:兩位數的日期(0到31)

    • -:日期分隔符

    • T:表示開始時間

    • HH:24位小時數(0到23)

    • mm:分鐘(0到59)

    • ss:秒(0到59)

    • sss:毫秒(0到999)

    • ::時間分隔符

    • Z:如果存在Z,則日期將設置為UTC,如果Z不存在,則為本地時間。

    其中小時,分鐘,秒和毫秒是可選的,如果你想創建一個2019年6月11日的日期,可以這樣寫:new Date('2019-06-11')在這里要特別注意,使用日期字符串參數創建日期存在很大問題,把創建的日期打印出來就可以發現問題。如果你住在**格林威治標準時間(GMT)**晚的的地區,你會得到一個日期是6月10日。如果你住在比格林威治標準時間早的地區,才會等得到6月11日的日期。發生這種情況是因為日期字符串參數的方法具有特殊行為:如果創建日期(未指定時間),則會獲得UTC格式設置的日期。在上面的場景中,使用new Date('2019-06-11')創建日期時,實際上創建的日期是2019年6月11日,UTC時間上午12點。這就是為什么住在格林尼治標準時間之后的地區的人得到的是6月10日而不是6月11日。如果要使用日期字符串參數方法在“本地時間”中創建日期,則需要包括時間。如果包含時間,則需要至少寫入HH和mmnew Date('2019-06-11T00:00')使用日期字符串參數的創建的本地時間與UTC的比較可能是一個難以捕捉的錯誤。所以,建議不要使用日期字符串創建日期方式。格林威治標準時間GMT十七世紀,格林威治天文臺為了海上霸權的擴張計畫而進行天體觀測。1675年舊觀測所(Old Royal Observatory) 正式成立,到了1884年決定以通過格林威治的子午線作為劃分地球東西兩半球的經度零度。觀測所門口墻上有一個標志24小時的時鐘,顯示當下的時間,對全球而言,這里所設定的時間是世界時間參考點,全球都以格林威治的時間作為標準來設定時間,這就是我們耳熟能詳的「格林威治標準時間(Greenwich Mean Time,簡稱G.M.T.)的由來,標示在手表上,則代表此表具有兩地時間功能,也就是同時可以顯示原居地和另一個國度的時間。世界協調時間UTC多數的兩地時間表都以GMT來表示,但也有些兩地時間表上看不到GMT字樣,出現的反而是UTC這3個英文字母,究竟何謂UTC?事實上,UTC指的是Coordinated Universal Time- 世界協調時間(又稱世界標準時間、世界統一時間),是經過平均太陽時(以格林威治時間GMT為準)、地軸運動修正后的新時標以及以「秒」為單位的國際原子時所綜合精算而成的時間,計算過程相當嚴謹精密,因此若以「世界標準時間」的角度來說,UTC比GMT來得更加精準。其誤差值必須保持在0.9秒以內,若大于0.9秒則由位于巴黎的國際地球自轉事務中央局發布閏秒,使UTC與地球自轉周期一致。所以基本上UTC的本質強調的是比GMT更為精確的世界時間標準,不過對于現行表款來說,GMT與UTC的功能與精確度是沒有差別的。

    使用一系列的參數創建

    最多可以傳入七個參數來創建日期/時間。
  • Year:4位數年份

  • Month:一年中的某月(0-11)

  • Day:每月的某天(1-31),如果省略,則默認為1。

  • Hour:一天中的小時(0-23),如果省略,則默認為0。

  • Minutes:分鐘(0-59),如果省略,則默認為0。

  • Seconds:秒(0-59),如果省略,則默認為0。

  • Milliseconds:毫秒(0-999),如果省略,則默認為0。

    // 11th June 2019, 5:23:59am, Local Time
    new Date(2019, 5, 11, 5, 23, 59)

  • 許多開發人員比較少用這種方式,因為它看起來很復雜,但它實際上非常簡單。可以從左到右記憶:年、月、日、小時、分鐘、秒和毫秒。Date 中需要注意的地方Month是從0開始的,如1月=== 0,2月=== 1,3月=== 2,依此類推。再來一些事件熟悉一下多個參數的用法// 21st March 1988, 12am, Local Time.new Date(1988, 2, 21)// 25th December 2019, 8am, Local Time.new Date(2019, 11, 25, 8)// 6th November 2023, 2:20am, Local Timenew Date(2023, 10, 6, 2, 20)// 11th June 2019, 5:23:59am, Local Timenew Date(2019, 5, 11, 5, 23, 59)注意,使用參數創建的日期都是用本地時間使用參數的還有一個好處是不會在本地時間和UTC之間混淆,如果需要UTC時間,請以這種方式創建UTC 日期:// 11th June 2019, 12am, UTC.new Date(Date.UTC(2019, 5, 11))

    使用時間戳來創建日期

    在JS中,時間戳是自1970年1月1日以來經過的毫秒數(1970年1月1日也稱為Unix紀元時間)。根據我的經驗,很少使用時間戳來創建日期,一般使用時間戳來比較不同的日期或者格式化日期,后面在討論。

    不帶參數的形式創建日期

    如果創建沒有任何參數的日期,則會將日期設置為當前時間(以本地時間為單位)。new Date()小結一波
  • 使用 new Date() 創建日期

  • 有四種可能的語法:

    • 使用字符串日期值
    • 使用一系列參數
    • 使用時間戳
    • 不帶參數
  • 最好不要使用字符串日期值的方法創建日期

  • 最好使用一系列參數方式創建日期

  • 記住月份是從0開始的

  • 格式化日期

    多數編程語言都提供了一種格式工具來創您想要的任何日期格式 例如,在PHP中,可以將date("d M Y")格式化成23 1月 2019這樣的日期。但是在JS 中格式化日期并不容易。原生?Date對象提供了七種格式化方法,這七種方法中的每一種都會給你一個特定的價值,而且它們毫無用處。const date = new Date(2019, 0, 23, 17, 23, 42)
  • toString:格式化成 "Wed Jan 23 2019 17:23:42 GMT+0800 (中國標準時間)"

  • toDateString: 格式化成 "Wed Jan 23 2019"

  • toLocaleString:格式化成 "2019/1/23 下午5:23:42"

  • toLocaleDateString:格式化成 "2019/1/23"

  • toGMTString:格式化成 "Wed, 23 Jan 2019 09:23:42 GMT"

  • toUTCString:格式化成 "Wed, 23 Jan 2019 09:23:42 GMT"

  • toISOString :格式化成 "2019-01-23T09:23:42.000Z"

  • 如果需要自定義格式,則要自己創建。

    編寫自定義日期格式

    假設想要?2019年1月23日 星期四這樣的日期格式。需要知道?Date對象日期方法。要獲取這樣的格式,用到?Date中的四個方法:
  • getFullYear:獲取當地時間4位數的年份

  • getMonth:獲取當時時間的月份,注意從 0 開始

  • getDate:獲取當地時間月中的某一天(1-31)

  • getDay:獲取當地時間的星期幾(0-6),星期日(0)開始,到星期六(6)結束。

    const d = new Date(2019, 0, 23)
    const year = d.getFullYear() // 2019
    const date = d.getDate() // 23

  • 因為星期和月份是從0開始的,所以我們可以創建一個映射表:const months = { 0: '1月', 1: '2月', 2: '3月', 3: '4月', 4: '5月', 5: '6月', 6: '7月', 7: '8月', 8: '9月', 9: '10月', 10: '11月', 11: '12月'}由于月份是0開始的的,我們可以使用數組代替對象,結果一樣:const months = [ '1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'}要得到1月份,你需要const monthIndex = d.getMonth()const monthName = months[monthIndex]console.log(monthName) // 1月簡化一下:const monthName = months(d.getMonth())console.log(monthName) // 1月為了獲取 星期四,還需要 做同樣的事情:const days = [ '星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']獲取方式:const dayName = days[d.getDay()] // 星期四接著就產拼接起來。這是相對乏味的。如果需要創建自定義格式的時間,可以使用以下方法
  • getHours:獲取當地時間獲取小時數(0-23)。

  • getMinutes:獲取本地時間獲取分鐘(0-59)。

  • getSeconds:獲取本地時間獲取秒數(0-59)。

  • getMilliseconds:獲取本地時間獲取毫秒(0-999)。

  • 日期的比較

    比較日期的前后,可以直接使用>,?<,?>=和?<=時行比較。const earlier = new Date(2019, 0, 26)const?later?=?new?Date(2019,?0,?27)console.log(earlier < later) // true比較兩個日期是否一樣,就比較麻煩,不能直接用?==或?===const a = new Date(2019, 0, 26)const?b?=?new?Date(2019,?0,?26)console.log(a == b) // falseconsole.log(a === b) // false可以getTime獲取它們的時間戳,用時間戳進行比較。const isSameTime = (a, b) => { return a.getTime() === b.getTime()}const a = new Date(2019, 0, 26)const b = new Date(2019, 0, 26)console.log(isSameTime(a, b)) // true如果只想檢查兩個日期是否在同一天,可以比較他們的getFullYear,getMonth和getDate值。const isSameDay = (a, b) => { return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate()=== b.getDate()}const a = new Date(2019, 0, 26, 10) // 26 Jan 2019, 10amconst b = new Date(2019, 0, 26, 12) // 26 Jan 2019, 12pmconsole.log(isSameDay(a, b)) // true

    從另一個日期獲取日期

    有兩種可能的情況,希望從另一個日期獲得一個日期。
  • 設置另一個日期特定的日期/時間值

  • 從另一個日期添加/減去增量

  • 設置另一個日期特定的日期/時間值

    可以使用以下方法設置另一個日期的日期/時間:
  • setFullYear: 設置年份

  • setMonth:設置月份

  • setDate:設置每月的某一天

  • setHours:設置時

  • setNubytes:設置分

  • setSeconds:設置秒

  • setMilliseconds:設置毫秒

  • 例如,如果想將日期設置為每月15日,可以使用setDate(15)const d = new Date(2019, 0, 10)d.setDate(15)console.log(d) // 15 January 2019注意:上面的setter方法會改變原始日期對象。在實際中,我們不應該改變對象,應該在新的日期對象上執行這些操作。const d = new Date(2019, 0, 10)const newDate = new Date(d)newDate.setMonth(5)console.log(d) // 10 January 2019console.log(newDate) // 10 June 2019

    從另一個日期添加/減去增量

    添加/減去增量有兩種通用方法。第一種方法在Stack Overflow上更受歡迎,它簡潔,但更難掌握。第二種方法更冗長,但更容易理解。假設希望獲得從今天起三天的日期。對于這個例子,假設今天是2019年3月28日。

    第一種方法

    const today = new Date(2019, 2, 28)首先,我們創建一個新的Date對象,這樣就不會改變原始日期const finalDate = new Date(today)接下來,我們需要知道要更改的值。因為我們要改變日期,所以我們可以用getDate獲得日期const currentDate = today.getDate()因為獲取三天后的日期,所以需要在得到的日期加3setDate(currentDate + 3)完整代碼:const today = new Date(2019, 2, 28)const finalDate = new Date(today)finalDate.setDate(today.getDate()?+?3)console.log(finalDate) // 31 March 2019

    第二種方法

    使用getFullYear,getMonth,getDate方法,更改對應的值, 然后,我們使用new Date創建最終日期。const today = new Date(2019, 2, 28)// Getting required valuesconst year = today.getFullYear()const month = today.getMonh()const day = today.getDate()// Creating a new Date (with the delta)const finalDate = new Date(year, month, day + 3)console.log(finalDate) // 31 March 2019

    自動日期校正

    如果為Date提供一個超出其可接受范圍的值,JS 將自動重新計算日期。如下所示,假設我們把日期定在2019年3月33日,日歷上沒有33日,JS 會自動將3月33日調整為4月2日。這意味著在創建增量時無需擔心計算分鐘,小時,天,月等,JavaScript會自動處理。

    總結

    以上是生活随笔為你收集整理的js 获得明天0点时间戳_需要知道的JS的日期知识,都在这了的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。