js中Date的構造函數解讀

来源:https://www.cnblogs.com/conan-lv/archive/2019/09/19/11551398.html
-Advertisement-
Play Games

javascript中的內置對象是我們經常會用到的,那麼今天我們就來說說Date的四種構造方法吧 一、new Date() 這是我們最常使用也最熟悉不過的Date對象的構造方法了,通過無參數的構造函數我們可以預設獲取到一個代表實例化時的Date對象 二、new Date(value) 這個構造方法的 ...


javascript中的內置對象是我們經常會用到的,那麼今天我們就來說說Date的四種構造方法吧

 

一、new Date()

  這是我們最常使用也最熟悉不過的Date對象的構造方法了,通過無參數的構造函數我們可以預設獲取到一個代表實例化時的Date對象

 

var now = new Date();
console.log(now) //Thu Sep 19 2019 16:13:08 GMT+0800 (中國標準時間)

 

 

 

二、new Date(value)

  這個構造方法的參數是一個Number型,表示自1970年1月1日00:00:00 UTC(the Unix epoch)以來的毫秒數,忽略了閏秒。這個方法中可以用整型,也可以用浮點型,不過浮點型後面的小數點後的尾數一般會被忽略就是了。雖然在node環境(v10.15.3)下參數的確是從00:00:00時分開始計數,但是,通過實測發現在部分瀏覽器環境(在Edge,Chrome下如此)下參數是卻從08:00:00開始計數,如下代碼所示:

//瀏覽器
var time1 = new Date(1000);
var time2 = new Date(2000.2);
var time3 = new Date(2000.8);
console.log(time1); //Thu Jan 01 1970 08:00:01 GMT+0800 (中國標準時間)
console.log(time2); //Thu Jan 01 1970 08:00:02 GMT+0800 (中國標準時間)
console.log(time3.getMilliseconds()); //0

//node
var time4 = new Date(1000);
console.log(time4); //1970-01-01T00:00:00.001Z

 

  原因分析:node中是嚴格遵守UTC時間標準的,所以是嚴格的1970年1月1日00:00:00 UTC(the Unix epoch);而在瀏覽器中一般是以本地時間為準,例如:在中國是以北京時間為基準的,而北京在東八區,所以會比標準的格林尼治時間要多8個小時,將電腦時區設置成太平洋時區後測試

//改成太平洋時間後
var time5 = new Date(1000);
console.log(time5); //Wed Dec 31 1969 16:00:01 GMT-0800 (Pacific Standard Time)

  看到太平洋時間發現時間被“減了”,就會想到參數為負數的時候,是不是也會從這個基準時間開始減,如下:

//北京時間下
var time6 = new Date(-1000);
console.log(time6); //Thu Jan 01 1970 07:59:59 GMT+0800 (China Standard Time)

 

三、new Date(dateString)

  這個構造函數應該是最有用和最會出現一些問題的了。參數dateString,顧名思義,是一個String型的格式化date字元串。該字元串應該能被Date.parse()方法正確識別,即符合IETF-compliant RFC 2822 timestamps或version of IOS8601。那這個構造函數到底能解析哪些格式化字元串?又不能解析哪些字元串呢?

  註:因為該構造函數在不同瀏覽器以及不同node版本之間有差異,故不推薦大家使用,同理也不推薦使用Date.parse,大家可以使用自己定義的工具函數把字元串轉成date哦!

 

 

 

var time1 = new Date('2019/9/9');
var time2 = new Date('2019/09/09');
var time3 = new Date('2019-9-9');
var time4 = new Date('2019-09-09');
var time5 = new Date('2019 9 9');
var time6 = new Date('2019/9/9 12:20:05');
var time7 = new Date('2019-9-9 12:70:100');
var time8 = new Date('2019 9 9 14 0 1');
var time9 = new Date('2019/09/09 -12:20:13');
var time10 =new Date("February 3,2009 12:30:15");
console.log(time1); //Mon Sep 09 2019 00:00:00 GMT+0800 (中國標準時間)
console.log(time2); //Mon Sep 09 2019 00:00:00 GMT+0800 (中國標準時間)
console.log(time3); //Mon Sep 09 2019 00:00:00 GMT+0800 (中國標準時間)
console.log(time4); //Mon Sep 09 2019 08:00:00 GMT+0800 (中國標準時間)
console.log(time5); //Mon Sep 09 2019 00:00:00 GMT+0800 (中國標準時間)
console.log(time6); //Mon Sep 09 2019 12:20:05 GMT+0800 (中國標準時間)
console.log(time7); //Invalid Date
console.log(time8); //Invalid Date
console.log(time9); //Invalid Date
console.log(time10); Tue Feb 03 2009 12:30:15 GMT+0800 (中國標準時間)

 

一般情況下,建議使用yyyy/MM/dd hh:mm:ss格式,其他格式可能會出現意想不到的錯誤

 

四、new Date(year,monthIndex[,day[,hours[,minutes[,seconds[,milliseconds]]]]]

  這個構造通過多個函數,指定年月日時分秒來構造日期對象。此方法參數至少為兩個,表示年月,可選參數5個,因為參數只有1個的話,是number型會使用第二種構造方法,是string型會使用第三種構造方法。此方法的參數類型可以是整數,浮點數(浮點會被轉化為整型),或是字元串(字元串會被轉化為Number型),也可以是正數、負數(但是,註意不能超過日期所能表示的最大範圍 -100,000,000 天至 100,000,000 天)。當參數只有2個的時候,除了day預設為1,其餘參數預設為0(此時不受時區的影響)。另外,參數2的月份需要加1,因為它對應的是0-11(同getMonth()和setMonth())

var time1 = new Date(2019,2);
var time2 = new Date(2019.3,'5');
var time3 = new Date(2019,4,-3);
var time4 = new Date(2019,5,10,13,70,100,50);
console.log(time1); //Fri Mar 01 2019 00:00:00 GMT+0800 (中國標準時間)
console.log(time2); //Sat Jun 01 2019 00:00:00 GMT+0800 (中國標準時間)
console.log(time3); //Sat Apr 27 2019 00:00:00 GMT+0800 (中國標準時間)
console.log(time4); //Mon Jun 10 2019 14:11:40 GMT+0800 (中國標準時間)

  同之前的原因,在node環境下,時間會出現偏移,在原有”標準時間“下要減去時區的時間差,例如,北京時間為東八區,在瀏覽器中基本保持與傳參一致,但是在node環境下會”減去”這八小時的時間差,相反,西八區會加上這八小時的時間差。

 

最後,再說一點,就是Date對象作為參數構造Date在某些情況下也是可以的,這個時候,參數先被解析成字元串,然後通過第二種構造方法執行

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • jQuery 效果方法 下表列出了用於創建動畫效果的所有jQuery方法。 ...
  • 示例代碼托管在: "http://www.github.com/dashnowords/blogs" 博客園地址: "《大史住在大前端》原創博文目錄" 華為雲社區地址: "【你要的前端打怪升級指南】" [TOC] B站地址: "【編譯原理】" Stanford公開課: "【Stanford大學公開課 ...
  • 1.JSX理解 舉例: 這被稱為 JSX,是一個 JavaScript 的語法擴展。建議在 React 中配合使用 JSX,JSX 可以生成 React “元素”,而且JSX 可以很好地描述 UI 應該呈現出它應有交互的本質形式。JSX 可能會使人聯想到模版語言,但它具有 JavaScript 的全 ...
  • [TOC] 數組 array 解釋器 遇到var聲明的變數,會把var聲明的變數提升到全局作用域下 1. isArray isArray() 判斷當前數組是否為數組,返回值是true,則證明是數組 2. 轉換方法 調用數組的toString()方法會返回由數組中每個值的字元串形式拼接而成的一個以逗號 ...
  • [TOC] 字元串 typeof 用於校驗當前變數的數據類型 1. 拼接字元串 在Javascript中拼接字元串使用加號(+)操作符,之前我們是拿+來做數字加法運算,但是在這種情況下,它做了一下不同的事情。 js var name = 'wusir', age = 28; //es6以下版本的字元 ...
  • JSON是javascript的子類,也是作為更好的互聯網傳輸結構化數據格式逐漸取代XML,因此要理解JSON,重要的是理解它是一種數據格式,不是一種編程語言。 語法 由於JSON是數據格式,所以沒有變數的概念,同時鍵值必須使用雙引號。 JSON的stringify與parse方法(序列化與解序) ...
  • /** * * 動畫函數多個目標值之間移動 * 1、如果是正值,則向大取整 2、如果是負值,則向小取整 * * * * @param {元素} obj * @param {距離} target * @param {回調函數} callback */ function ainmate (obj,tar ...
  • Predefined:js中的this指向直接運行上下文。 call和apply是ECMASCRIPT 3在函數原型上所定義的方法,目的在於改變或指定this的指向,從而改變函數直接執行上下文。兩者的不同之處在於傳參,call接受多個參數,而apply接受數組。 1:隱藏的call和apply: 默 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...