用dayjs解析時間戳,我被提了bug

引言

前幾天開發中突然接到測試提的一個 Bug,說我的時間組件顯示異常。

我很詫異,這里初始化數據是后端返回的,我什么也沒改,這bug提給我干啥。我去問后端:“這數據是不是有問題?”。后端答:“沒問題啊,我們一直都是這么返回的時間戳,其他人用也沒報錯。”

于是,對比生產環境數據,我終于找到了問題根源:后端時間戳的類型,從 Number 靜悄悄地變成了 String。

Bug原因

問題的原因,肯定就出現在時間數據解析上了,代碼中,我統一用的dayjs做的時間解析。

如圖,對時間戳的解析我都是這么寫的

const time = dayjs(res.endTime).format('YYYY-MM-DD HH:mm:ss')

于是,我分別試了兩種數據類型的解析方式:

  • 字符型
dayjs('175008959900').format('YYYY-MM-DD hh:mm:ss') // 1975-07-19 01:35:59
  • 數值型
dayjs(Number('175008959900')).format('YYYY-MM-DD HH:mm:ss') // 2025-07-17 06:59:59

看來,問題原因顯而易見了:

由于后端返回的是字符串類型'175008959900'dayjs() 在處理字符串時,會嘗試按“常見的日期字符串格式”進行解析(如 YYYY-MM-DDYYYYMMDD 等),并不會自動識別為時間戳。所以它不會把這個字符串當作毫秒時間戳來解析,而是直接失敗(解析成無效日期),但 dayjs 會退化為 Unix epoch(1970 年)或給出錯誤結果,最終導致返回的是錯誤的時間。

如何避免此類問題

同dayjs一樣,原生的 new Date() 在解析時間戳時也存在類似的問題,因此,不管是 Date 還是 dayjs,一律對后端返回的時間戳 Number(input) 兜底處理,永遠不要信任它傳的是數字還是字符串:

const ts = Number(res.endTime);
const date = new Date(ts);

思考

其實出現這個問題,除了后端更改時間戳類型,也在于我沒有充分理解“時間戳”的含義。我一直以為時間戳就是一段字符或一段數字,因此,從來沒有想過做任何兜底處理。那么,什么是時間戳?

時間戳(Timestamp) 是一種用來表示時間的數字,通常表示從某個“起點時刻”到某個指定時間之間所經過的時間長度。這個“起點”大多數情況下是 1970 年 1 月 1 日 00:00:00 UTC(Unix 紀元)

常見時間戳類型:

類型單位示例值說明
Unix 時間戳(秒)1750089599常見于后端接口、數據庫存儲
毫秒時間戳毫秒1750089599000JavaScript 常用,Date.now()

時間戳的意義:

  • 它是一個 絕對時間的數字化表示,可以跨語言、跨平臺統一理解;
  • 更容易做計算:兩個時間戳相減就能得到毫秒差值(時間間隔);
  • 更緊湊:比如比字符串 "2025-07-17 06:59:59" 更短,處理性能更高。

在 JavaScript 中的使用:

console.log(Date.now()); // 比如:1714729530000// 將時間戳轉為日期
console.log(new Date(1750089599000)); // Thu Jul 17 2025 06:59:59 GMT+0800

關于我

一個熱愛技術分享的資深前端工程師,技術棧為Vue、React、Threejs,當然對一些前沿的技術也比較感興趣,如微前端、鴻蒙開發、油猴腳本開發等。
如果你對前端技術也充滿熱愛或者希望關注一些前沿技術,歡迎加群討論~

當然,如果你有任何面試、工作上遇到的技術問題也都可以在群里提問,有時間我就會及時回答~

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/85422.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85422.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85422.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DataAgent產品經理(數據智能方向)

DataAgent產品經理(數據智能方向) 一、核心崗位職責 AI智能體解決方案設計 面向工業/政務場景構建「數據-模型-交互」閉環,需整合多源異構數據(如傳感器數據、業務系統日志)與AI能力(如大模型微調、知識圖…

Ubuntu取消開機用戶自動登錄

注:配置前請先設置登錄密碼,不同顯示管理器配置方法不同,可用命令查看:cat /etc/X11/default-display-manager 一、LightDM 顯示管理器,關閉 Ubuntu 系統用戶自動登錄 查找自動登錄配置文件,可以看到類似 a…

使用lighttpd和開發板進行交互

文章目錄 🧠 一、Lighttpd 與開發板的交互原理1. 什么是 Lighttpd?2. 與開發板交互的方式? 🧾 二、lighttpd.conf 配置文件講解?? 注意事項: 📁 三、目錄結構說明💡 四、使用 C 編寫 CGI 腳本…

Apache IoTDB V2.0.3 發布|新增元數據導入導出腳本適配表模型功能

Release Announcement Version 2.0.3 Apache IoTDB V2.0.3 已經發布! V2.0.3 作為樹表雙模型正式版本,主要新增元數據導入導出腳本適配表模型、Spark 生態集成(表模型)、AINode 返回結果新增時間戳,表模型新增部分聚…

車輛檢測算法在爆炸事故應急響應中的優化路徑

視覺分析賦能車輛管控:以山東應急場景為例 背景:應急場景下的車輛管控痛點 近期山東多起爆炸事故暴露了應急響應中的車輛管理短板:消防車、救護車因違停車輛堵塞通道,違規車輛闖入事故核心區,傳統監控系統依賴人工識別…

∑ 1/n 調和級數 是 發散的

為什么 ∑ 1 u \sum \frac{1}{u} ∑u1?(即 ∑ 1 n \sum \frac{1}{n} ∑n1?,通常稱為調和級數)是發散的? ? 一、首先明確你問的是這個級數: ∑ n 1 ∞ 1 n \sum_{n1}^{\infty} \frac{1}{n} n1∑∞?n1? 這個級數…

Android第十二次面試-多線程和字符串算法總結

多線程的創建與常見使用方法 ?一、多線程創建方式? ?1. 繼承Thread類? class MyThread extends Thread {Overridepublic void run() {// 線程執行邏輯System.out.println(Thread.currentThread().getName() " is running");} }// 使用 MyThread thread new …

大模型調用數據庫表實踐:基于自然語言的SQL生成與數據查詢系統

# 大模型調用數據庫表實踐:基于自然語言的SQL生成與數據查詢系統 ## 一、背景與目標 在企業數據管理場景中,非技術人員(如業務人員、管理人員)常常需要通過數據庫查詢獲取關鍵信息,但直接編寫SQL語句存在技術門檻。傳…

28 C 語言作用域詳解:作用域特性(全局、局部、塊級)、應用場景、注意事項

1 作用域簡介 作用域定義了代碼中標識符(如變量、常量、數組、函數等)的可見性與可訪問范圍,即標識符在程序的哪些位置能夠被引用或訪問。在 C 語言中,作用域主要分為三類: 全局作用域局部作用域塊級作用域 需注意&am…

Tomcat運行比較卡頓進行參數調優

在Tomcat conf/catalina.bat或catalina.sh中 的最上面增加參數 1. 初步調整參數(緩解問題) set JAVA_OPTS -Xms6g -Xmx6g -Xmn3g # 增大新生代,減少對象過早晉升到老年代 -XX:MetaspaceSize256m -XX:MaxMetaspaceS…

WSL2 安裝與Docker安裝

注意:如沒有科學上網請勿嘗試,無法判斷是否會因網絡錯誤導致的安裝失敗!!! WSL2(Windows Subsystem for Linux 2) 功能簡介: WSL2 是微軟提供的在 Windows 上運行完整 Linux 內核的…

Redis的安裝與使用

網址:Spring Data Redis 安裝包:Releases tporadowski/redis GitHub 解壓后 在安裝目錄中打開cmd 打開服務(注意:每次客戶端連接都有先打開服務!!!) 按ctrlC退出服務 客戶端連接…

springboot-響應接收與ioc容器控制反轉、Di依賴注入

1.想將服務器中的數據返回給客戶端,需要在controller類上加注解:ResponseBody; 這個注解其實在前面已經使用過,RestController其實就包含兩個注解: Controller ResponseBody 返回值如果是實體對象/集合,將會轉換為j…

將材質球中的紋理屬性對應的貼圖保存至本地

通過Texture2D的EncodeToPNG方法將紋理轉為圖片形式 material.GetTexture方法通過屬性名獲取紋理貼圖 material.SetTexture方法通過屬性名設置紋理貼圖 屬性名可在shader代碼中查看 using UnityEngine; using System.IO;public class TextureSaver : MonoBehaviour {public…

MySQL半同步復制配置和參數詳解

目錄 1 成功配置主從復制 2 加載插件 3 半同步復制監控 4 半同步復制參數 1 成功配置主從復制 操作步驟參考:https://blog.csdn.net/zyb378747350/article/details/148309545 2 加載插件 #主庫上 MySQL 8.0.26 之前版本: mysql>INSTALL PLUGIN rpl_semi_syn…

【筆記】Windows 成功部署 Suna 開源的通用人工智能代理項目部署日志

#工作記錄 本地部署運行截圖 kortix-ai/suna: Suna - 開源通用 AI 代理 項目概述 Suna 是一個完全開源的 AI 助手,通過自然對話幫助用戶輕松完成研究、數據分析等日常任務。它結合了強大的功能和直觀的界面,能夠理解用戶需求并提供結果。其強…

PCB制作入門

文章目錄 1 嘉立創使用旋轉 2元器件選擇MP2315SLM7815與LM7915 1 嘉立創使用 旋轉 空格旋轉 2元器件選擇 MP2315S MP2315S 是一款內置功率 MOSFET 的高效率同步整流降壓開關變換器。 其輸入電壓范圍為 4.5V 至 24V ,能實現 3A 連續輸出電流,負載與…

2025——》NumPy中的np.logspace使用/在什么場景下適合使用np.logspace?NumPy中的np.logspace用法詳解

1.NumPy中的np.logspace使用: 在 NumPy 中,np.logspace函數用于生成對數尺度上等間距分布的數值序列,適用于科學計算、數據可視化等需要對數間隔數據的場景。以下是其核心用法和關鍵細節: 一、基礎語法與參數解析: numpy.logspace(start, stop, num=50, endpoint=True, ba…

Java實現中文姓名轉拼音生成用戶信息并寫入文件

中文姓名轉拼音 Java實現中文姓名轉拼音生成用戶信息并寫入文件(shili域名版)一、項目背景與功能簡介二、技術棧與核心組件2.1 主要技術2.2 功能模塊 三、核心代碼解析3.1 主函數邏輯(流程控制)3.2 拼音轉換模塊(核心功…

Google car key:安全、便捷的汽車解鎖新選擇

有了兼容的汽車和 Android 手機,Google car key可讓您將Android 手機用作車鑰匙。您可以通過兼容的 Android 手機鎖定、解鎖、啟動汽車并執行更多功能。但是,Google car key安全嗎?它是如何工作的?如果我的手機電池沒電了怎么辦&a…