Date物件常用的封裝方法及遇到的問題解決
這篇文章帶給大家的內容是關於Date物件常用的封裝方法及遇到的問題解決,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
使用JS中的Date物件已經很久了,但是一直以來都沒有將常用的封裝函數和遇到的坑記錄下來,趁著今天有空,就記錄下來,方便自己下次直接使用,並提醒自己遇過那些坑。如果有哪些地方不對,希望大家能夠指出,那我將不勝感激。
在將日期(沒有時分秒)轉換為時間戳時,日期在用'-'(2019-01-01)和'/'(2019/01/01)連接時,轉換成時間戳的結果有所差異
為了不讓大家先看見例子太多而厭煩,就先上結論了。
結論:
1)如果日期之間是使用 '-'連接時,當月份和天數都小於9且前面加了一個 0 的話,那麼被轉為時間戳時會將時間默認轉換為當天的上午8點
2)如果日期之間是使用 '-'連接時,當月份和天數有一個小於9且小於9的前面加了一個 0 的話,那麼被轉為時間戳時會將時間預設轉換為當天的上午8點
3)如果日期之間是使用 '-'連接時,當月份和天數都小於9且只有一個前面加了一個 0 的話,那麼被轉為時間戳時會將時間預設轉換為當天的上午12點也就是00:00
4)如果日期之間是使用 '-'連接時,當月份和天數都大於9時,那麼被轉為時間戳時會將時間預設轉換為當天的上午8點
5)如果日期之間是使用 '/'連接時,那麼轉換成時間戳時只會被轉換為當天的凌晨 00:00
總結: 在將日期轉換為時間戳時,如果沒有設定時分時,最好使用 '/' 來進行連接,來避免相同日期在寫法不同時獲取的時間戳不同
下面的是用來證明結論的例子:
" let time1 = new Date('2019-03-03').getTime(); let time2 = new Date('2019/3/3').getTime(); console.log('获取时间') console.log(time1) console.log(time2) console.log( (time1-time2) / 1000 /60 /60 ) // 8 // 根据本地格式,把Date对象的时间转换为字符串 上午12:00:00也就是 00:00:00 console.log(new Date('2019-03-03').toLocaleString()) // 2019/3/3 上午8:00:00 console.log(new Date('2019-03-12').toLocaleString()) // 2019/3/12 上午8:00:00 console.log(new Date('2019-11-03').toLocaleString()) // 2019/11/3 上午8:00:00 console.log(new Date('2019-3-03').toLocaleString()) // 2019/3/3 上午12:00:00 console.log(new Date('2019-03-3').toLocaleString()) // 2019/3/3 上午12:00:00 console.log(new Date('2019-11-13').toLocaleString()) // 2019/11/13 上午8:00:00 console.log(new Date('2019/03/03').toLocaleString()) // 2019/3/3 上午12:00:00 console.log(new Date('2019/3/3').toLocaleString()) // 2019/3/3 上午12:00:00 console.log(new Date('2019/03/3').toLocaleString()) // 2019/3/3 上午12:00:00 console.log(new Date('2019/3/03').toLocaleString()) // 2019/3/3 上午12:00:00 console.log(new Date('2019/03/12').toLocaleString()) // 2019/3/12 上午12:00:00 console.log(new Date('2019/11/03').toLocaleString()) // 2019/11/3 上午12:00:00 "
將日期格式轉換為時間戳記和將時間戳轉換為日期格式
1. 将日期格式转换为时间戳的三种方法 "javascript let dateStr = new Date('2019-3-20 18:59:39:123'); let timestamp1 = dateStr.getTime(); // 1553079579123 let timestamp2 = dateStr.valueOf(); // 1553079579123 let timestamp3 = Date.parse(dateStr); // 1553079579000 " date.getTime()、date.valueOf()会精确到毫秒,而Date.parse(date)只能精确到秒,毫秒用000替代 2. 将时间戳转换为日期格式 "javascript function dateFormat(timestamp) { timestamp = (timestamp + '' ).length > 10 ? timestamp : timestamp * 1000; //判断时间戳为几位,10位时加上毫秒,13为的则不管 let date = new Date(timestamp); let year = date.getFullYear(); let month = date.getMonth() + 1 > 9 ? date.getMonth() + 1 : '0' + (date.getMonth() + 1); // 月份从0开始,0~11, 所以显示时要 +1 let day = date.getDate() > 9 ? date.getDate() : '0' + date.getDate() ; let hour = date.getHours() > 9 ? date.getHours() : '0' + date.getHours() ; let minutes = date.getMinutes() > 9 ? date.getMinutes() : '0' + date.getMinutes(); let seconds = date.getSeconds() > 9 ? date.getSeconds() : '0' + date.getSeconds(); return year + '-' + month + '-' + day + ' ' + hour + ':' + minutes + ':' + seconds; } "
比較兩個日期之間相隔多少天
/** * @method 计算两个日期之间有几天,包括第一天 * @param beginTime 开始时间的日期 '2019-3-19' || '2019/3/19' * @param endTime 结束时间的日期 '2019-3-20' || '2019/3/19' */ getIntervalDay('2019-03-03', '2019-03-8'); // 若是没有用 正则将格式转换的话得到的结果是5天,转换后是6天 function getIntervalDay(beginTime, endTime) { // 先利用将其转换为统一的格式,因为 '-' 格式下的时间戳转换的结果不一致,原因在本文的开头 beginTime = beginTime.replace(/\-/g, '/'); endTime = endTime.replace(/\-/g, '/'); let time1 = new Date(beginTime).getTime(); let time2 = new Date(endTime).getTime(); // console.log(beginTime) // console.log(endTime) let second = time2 - time1; let day = parseInt(second / (1000 * 60 * 60 * 24)) + 1; // 当天也算进去 return day; }
#判斷一年有多少天
// 闰年为366天(2月中多一天),平年为365天。 // 闰年有两种: 1)普通闰年:能被4整除但不能被100整除的年份为普通闰年。 // 2)世纪闰年:能被400整除的为世纪闰年。 function getYearAllDay(year) { return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0 ? 366 : 365; }
取得某年的一個月的總天數
// date格式为 'xxxx-xx-xx' 'xxxx/xx/xx' 'xxxx/xx' 'xxxx-xx' function getMonthAllDay(date) { date = new Date(date); let year = date.getFullYear(); let month = date.getMonth() + 1; // 从 Date 对象返回月份 (0 ~ 11)。 let nextMonth = year + '-' + (month + 1); let newDate = new Date(nextMonth); newDate.setDate(0); // 利用设置日期时从1~31设置,当设置为0时,即上个月的最后一天 return newDate.getDate(); }
以上是Date物件常用的封裝方法及遇到的問題解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數
