10位時間戳、13位時間戳、17位時間戳,以及在JavaScript中的格式轉換

一、介紹

1、10位時間戳

2、13位時間戳

3、17位時間戳

4、時間戳轉換工具

二、13位時間戳的轉換

1、轉標準日期

2、轉格式化日期

三、10位時間戳的轉換

1、轉標準日期

2、轉格式化日期

四、17位時間戳的轉換

1、解析思路

2、解析過程

(1)統一單位

(2)差值計算

(3)截取時間

(4)轉標準日期

(5)格式化日期

3、完整代碼

4、新的問題?


一、介紹

1、10位時間戳

指的是Unix時間戳,它表示自1970年1月1日00:00:00 UTC(協調世界時) 以來的總秒數;

10位時間戳是一種常見的時間表示方式,因其簡單、易用、兼容性好,在軟件開發和網絡應用中被廣泛使用;

2、13位時間戳

指的是Unix時間戳,它表示自1970年1月1日00:00:00 UTC(協調世界時) 以來的總毫秒數;

13位時間戳是10位時間戳的擴展,將時間精度提高到了毫秒級,在需要高精度時間記錄和分析的場景中尤為有用;

3、17位時間戳

它表示自1601年1月1日00:00:00 GMT(格林威治時間) 以來的總微秒數;

17位的時間戳并不常見,但在Chrome、Edge,Firefox等瀏覽器的本地數據庫文件中,有關時間的字段都采用的是17位的時間戳;

4、時間戳轉換工具

無論是哪種格式的時間戳,都是用來表示一個時間點,但都不利于閱讀,因此需要將其轉換為有利于閱讀的標準日期格式;

時間戳轉換工具(10、13位時間戳)

時間戳轉換工具(17位時間戳)

二、13位時間戳的轉換

1、轉標準日期

  • 13位時間戳表示自1970年1月1日00:00:00的總毫秒數;
  • 使用JavaScript中的Date對象,可以將13位的時間戳轉換為標準日期;
  • 只需在創建Date對象時傳入需要轉換的13位時間戳即可;
// 以 1719366631159 時間戳為例
new Date(1719366631159)

2、轉格式化日期

使用該方法可以將13位的時間戳轉換成 yyyy-MM-dd HH:mm:ss 格式的日期字符串;

// 13位時間戳的格式化,以1719366631059為例
console.log("格式化13位時間戳1719366631059:", formatTimeStamp(1719366631059));function formatTimeStamp(timeStamp) {let date = new Date(timeStamp);let year = date.getFullYear();let month = date.getMonth() + 1;let day = date.getDate();let hour = date.getHours();let minute = date.getMinutes();let second = date.getSeconds();month = month < 10 ? "0" + month : month;day = day < 10 ? "0" + day : day;hour = hour < 10 ? "0" + hour : hour;minute = minute < 10 ? "0" + minute : minute;second = second < 10 ? "0" + second : second;return `${year}-${month}-${day} ${hour}:${minute}:${second}`;;
}

三、10位時間戳的轉換

1、轉標準日期

  • 10位時間戳表示自1970年1月1日00:00:00的總秒數;
  • 只需給10位時間戳 * 1000 轉成13位時間戳,其他按照13位時間戳的處理方式就可以了;
// 以 1719366631 時間戳為例
new Date(1719366631 * 1000);

?

2、轉格式化日期

// 13位時間戳的格式化,以1719366631059為例
console.log("格式化13位時間戳1719366631059:", formatTimeStamp(1719366631059));// 10位時間戳的格式化,以1719366631為例
console.log("格式化10位時間戳1719366631:", formatTimeStamp(1719366631 * 1000));

注意:這里使用的是上面13位時間戳的轉換方法,只需注意傳入的參數即可;?

?

四、17位時間戳的轉換

17位的時間戳在解析上就比較麻煩了,JavaScript中的Date對象只能用來處理13位的時間戳,所以只能將17位時間戳的換成13位時間戳的表示規則,再進行解析(哪位大佬有更好的辦法,求賜教);

17位時間戳-在線轉換工具

從上述網站可以直接對17位的時間戳進行轉換,如下圖所示:

?輸入要轉換的時間戳之后,Unix 時間戳(10位)、以及標準時間(GMT + 8:00)都能得到;

?接下來,以【13363929430000000】這個時間戳為例,進行解析;

1、解析思路

  • 將17位時間戳代表的微秒數轉換為毫秒數(進制1000),記為:timeStamp14;
  • 計算1601年1月1日00:00:00的時間戳,記為:epoch_start;
  • 計算1970年1月1日00:00:00的時間戳,記為:epoch_end;
  • 計算差值 epoch_end -?epoch_start, 記為epoch;
  • timeStamp14 - epoch,得到1970年1月1日00:00:00 以后的毫秒數, 記為ms;
  • 使用new Date(),創建日期傳入ms,得到根據ms創建的日期對象,記為date;
  • 再使用13位時間戳的格式化方法,對date進行格式化后得到格式化后的日期格式;

2、解析過程

(1)統一單位

  • 17位時間戳表示總微秒數;
  • 13位時間戳表示總毫秒數;
  • 需要將17位時間戳 / 1000 轉換成毫秒數(微秒與毫秒之間的進制為1000);
// 17位時間戳表示的總微秒數
let timeStamp17 = 13363929430000000;   // 轉換之后的總毫秒數
let timeStamp14 = Math.floor(timeStamp / 1000);

(2)差值計算

  • 17位時間戳起始時間是1601年1月1日00:00:00(GMT) 以來的總微秒數
  • 13位時間戳起始時間是1970年1月1日00:00:00 (UTC) 以來的總毫秒數
  • 需要計算出1601年1月1日00:00:00?到?1970年1月1日00:00:00的總毫秒數;
// "1601-1-1 00:00:00"的毫秒數:-11644502743000
let epoch_start = new Date("1601-1-1 00:00:00:000").getTime();   // "1970-1-1 00:00:00"的毫秒數:-28800000 
let epoch_end = new Date("1970-1-1 00:00:00:000").getTime();   let epoch = (epoch_end - epoch_start);   // 相差 11644473943000 毫秒 

注意:這里的時間是差了8小時的;

可以直接使用"1601-1-1 08:00:00:000"和"1970-1-1 08:00:00:000",計算差值結果都是一樣的;

(3)截取時間

截取17位時間戳從1970年1月1日00:00:00開始后的毫秒數;

let ms = timeStamp14 - epoch;   // 減去差值后:1719374657000

這時17位時間戳就已經變成了從1970年1月1日00:00:00開始后的毫秒數(13位時間戳);?

(4)轉標準日期

將前面獲取到的毫秒數進行轉換;

let date = new Date(ms);     // Wed Jun 26 2024 14:02:12 GMT+0800 (中國標準時間)

(5)格式化日期

使用13位時間戳的格式化方法;

formatTimeStamp(date);   // 2024-06-27 10:31:27

3、完整代碼

// 13363929430000000   1719455830   2024年6月27日星期四上午10點37分 GMT+08:00// 格式化17位時間戳13363929430000000: 2024-06-27 10:31:27
console.log("格式化17位時間戳13363929430000000:", format17TimeStamp(13363929430000000));    function format17TimeStamp(timeStamp){let epoch_start = new Date("1601-1-1 00:00:00:000");    console.log(epoch_start.getTime());   // "1601-1-1 00:00:00"的毫秒數:-11644502743000let epoch_end = new Date("1970-1-1 00:00:00:000");      console.log(epoch_end.getTime());   // "1970-1-1 00:00:00"的毫秒數:-28800000let epoch = (epoch_end.getTime() - epoch_start.getTime());      console.log(epoch);      // 相差epoch: 11644473943000 毫秒let timeStamp14 = Math.floor(timeStamp / 1000);     // timeStamp14: 13363929430000console.log("timeStamp14:", timeStamp14);let ms = timeStamp14 - epoch;   // ms: 1719455487000console.log("ms:", ms);let date = new Date(ms);        // date: Thu Jun 27 2024 10:31:27 GMT+0800 (中國標準時間)console.log("date:", date);return formatTimeStamp(date);   // 2024-06-27 10:31:27
}

4、新的問題?

很開心,終于解析出來了!!!

這就完了嗎? 當我以為已經成功的時候,突然看到

人家的是37分,我的是31分,這不是原地裂開了!!!!心都碎了一地~~~~~~~~~

.......................................................................................................................................................

找問題:年、月、日、小時都沒有問題,就差了5-6分鐘,難道是精度損失,也沒有啊,那這幾分鐘去哪了?

苦思冥想,頭發掉了又掉,為啥呢?

直到我做出了一個大膽的嘗試:

-------------------------------------------------------------------------------------------------------------------------------

使用13位的時間戳轉換工具,輸入0之后,跟預期結果一樣,是它的起始時間:

1970-01-01 08:00:00】,

使用17位的時間戳轉換工具,輸入0之后,按道理應該是他的起始時間:

1601年1月1日星期一早上8點00分 GMT+08:00】,但它不是!!!!!!!!!!!!!!

顯示 【GMT+08:05】,好像有那么點對上了,可能就是差在了這里!

可能是時區的問題,也可能是這個轉換工具的問題。。。。。(希望不是我的問題!!)

當然,這個問題我也是不太確定,沒有定論!

========================================================================

先記錄到這里吧,希望哪位走過路過的大佬指點指點,到底是為什么呢?

又要一晚上睡不著了~~~~~~~~~~~~~~~~~~~~~~~

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

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

相關文章

C++系統編程篇——Linux第一個小程序--進度條

&#xff08;1&#xff09;先引入一個概念&#xff1a;行緩沖區 \r和\n \r表示回車 \n表示回車并換行 ①代碼一 #include<stdio.h> #include<unistd.h> int main()…

django學習入門系列之第三點《偽類簡單了解》

文章目錄 hover&#xff08;偽類&#xff09;after&#xff08;偽類&#xff09;往期回顧 hover&#xff08;偽類&#xff09; 偽類指的是用冒號加的 hover樣式指的是&#xff0c;當用戶光標移動到設定區域后&#xff0c;所執行的用法 如&#xff1a; <!DOCTYPE html>…

【C語言】函數無參數有返回值、有參數無返回值、有參數有返回值

文章目錄 前言C語言函數的分類和使用無參數有返回值的函數有參數無返回值的函數有參數有返回值的函數 總結 前言 在C語言中&#xff0c;函數是一種重要的組織代碼的方式。根據函數的參數和返回值&#xff0c;我們可以將函數分為三類&#xff1a;無參數有返回值、有參數無返回值…

清理未使用的鏡像和容器

刪除未使用的鏡像和容器&#xff1a; docker system prune -a清理構建緩存&#xff1a; Docker 會緩存構建過程中使用的中間鏡像&#xff0c;可以通過以下命令清理它們&#xff1a; docker builder prune定期清理舊鏡像&#xff1a; 定期運行以下命令清理舊鏡像&#xff1a; …

通過代理從ARDUINO IDE直接下載開發板包

使用免費代理 實現ARDUINO IDE2.3.2 下載ESP8266/ESP32包 免費代理 列表 測試代理是否可用的 網站 有時&#xff0c;代理是可用的&#xff0c;但依然有可能找不到開發板管理器的資料包。 可以多換幾個代理試試。 代理的配置 文件 -> 首選項 -> 網絡 進入后做如下配置…

2024百度之星第二場-小度的01串

補題鏈接&#xff1a; 碼蹄集 一道經典線段樹板子題。 區間修改01置換&#xff0c;區間查詢子串權值。 唯一區別&#xff0c;權值要求的是相鄰字符都不同所需修改的最小字符個數。 我們在線段樹節點上分別維護當前連續區間&#xff1a; 奇數位是0的個數&#xff08;j0&…

K8S兩種安裝方式如何選擇?

K8S兩種安裝方式如何選擇&#xff1f;\nKubeadm VS kubernetes 二進制\n\n1、kubeadm 方式部署&#xff08;推薦&#xff09;\n推薦理由&#xff1a;\n\n官方推薦&#xff1a;kubeadm 是 Kubernetes 官方提供的工具&#xff0c;用于快速搭建生產級別的 Kubernetes 集群&#xf…

python讀取hdf4文件

記錄一下使用xarray讀取hdf4&#xff08;not hdf5&#xff09;過程中遇到的問題. 目的: 讀取hdf4 file的matadata遇到的問題&#xff1a;使用xarray.open_dataset()失敗解決方法&#xff1a;使用pyhdf.SD代替 import os from pyhdf.SD import SD, SDC import xarray as xr im…

ios CCNSDate.m

// // CCNSDate.h // CCFC // // Created by xichen on 11-12-17. // Copyright 2011年 ccteam. All rights reserved. //#import <Foundation/Foundation.h>interface NSDate(cc)// 獲取系統時間(yyyy-MM-dd HH:mm:ss.SSS格式)(NSString *)getSystemTimeStr;// prin…

記錄Spring Boot中的API請求參數讀取方式

一、背景 項目開發中經常使用Spring Boot開發API&#xff0c;所以讀取請求參數是服務端編碼中最基本最常見的操作項&#xff0c;Spring Boot中也提供多種機制來滿足不同的API設計要求。接下來就記錄一下項目中用過的6種請求參數讀取方式。 RequestParam 用來加載請求URL中&q…

2024年6月24日-6月30日(ue5肉鴿視頻p16-p25)

試過重點放在獨立游戲上&#xff0c;有個indienova獨立游戲團隊是全職的&#xff0c;由于他們干了幾個月&#xff0c;節奏暫時跟不上&#xff0c;緊張焦慮了。五一時也有點自暴自棄了&#xff0c;實在沒必要&#xff0c;按照自己的節奏走即可。精力和時間也有限&#xff0c;放在…

Python和tkinter實現的字母記憶配對游戲

Python和tkinter實現的字母記憶配對游戲 因為這個小游戲用到了tkinter&#xff0c;先簡要介紹一下它。tkinter是Python的標準GUI(圖形用戶界面)庫&#xff0c;它提供了一種簡單而強大的方式來創建圖形界面應用程序。它提供了創建基本圖形界面所需的所有工具&#xff0c;同時保…

OSI七層模型TCP/IP四層面試高頻考點

OSI七層模型&TCP/IP四層&面試高頻考點 1 OSI七層模型 1. 物理層&#xff1a;透明地傳輸比特流 在物理媒介上傳輸原始比特流&#xff0c;定義了連接主機的硬件設備和傳輸媒介的規范。它確保比特流能夠在網絡中準確地傳輸&#xff0c;例如通過以太網、光纖和無線電波等媒…

什么是有效的電子簽名?PDF電子簽名怎樣具備法律效力?

電子簽名逐漸成為商務文書和法律文件中不可或缺的一部分。《電子簽名法》自2005年4月1日起施行&#xff0c;這一立法是中國信息化法律的重要里程碑&#xff0c;為電子簽名應用奠定了法律基礎。電子簽名不僅僅是一種技術手段&#xff0c;更是一種法律認可的簽名形式。那么究竟什…

js生成UUID確保數據的唯一性

在JavaScript中&#xff0c;生成UUID&#xff08;Universally Unique Identifier&#xff09;通常用于確保數據的唯一性。 以下是一個簡單的使用JavaScript生成UUID的示例&#xff0c;它基于RFC 4122版本4&#xff08;隨機UUID&#xff09;的算法&#xff1a; function gener…

Python私教張大鵬 PyWebIO通過事件回調實現表格的編輯和刪除功能

從上面可以看出&#xff0c;PyWebIO把交互分成了輸入和輸出兩部分&#xff1a;輸入函數為阻塞式調用&#xff0c;會在用戶瀏覽器上顯示一個表單&#xff0c;在用戶提交表單之前輸入函數將不會返回&#xff1b;輸出函數將內容實時輸出至瀏覽器。這種交互方式和控制臺程序是一致的…

學習TTS遇到的問題2 什么是TCN模型

學習TTS遇到的問題2 什么是TCN模型 什么是TCN模型怎么理解 TCN中的 dilation&#xff1f;什么是 Dilation具體例子數學表達作用例子代碼示例 什么是TCN模型 https://juejin.cn/post/7262269863343079479 https://blog.csdn.net/weixin_57726558/article/details/132163074 由下…

出手便是王炸,曙光存儲將高端存儲推向新高度

二十年磨一劍&#xff0c;今朝試鋒芒。 近日&#xff0c;曙光存儲重磅發布全球首個億級IOPS集中式全閃存儲FlashNexus&#xff0c;正式宣告進入高端存儲市場。 作為存儲產業皇冠上的明珠&#xff0c;高端存儲一向以技術難度大、市場準入門檻高和競爭格局穩定著稱&#xff0c;…

從0-1搭建一個web項目(package.json)詳解

本章分析package.json文件詳解 本文主要對packge.json配置子文件詳解 ObJack-Admin一款基于 Vue3.3、TypeScript、Vite3、Pinia、Element-Plus 開源的后臺管理框架。在一定程度上節省您的開發效率。另外本項目還封裝了一些常用組件、hooks、指令、動態路由、按鈕級別權限控制等…

Centos7源碼方式安裝sqle及開發相關

官方文檔-源碼安裝 操作系統&#xff1a;centos:7.9,everything (DVD版應該也可以) (在ubuntu22.04裝了兩天之后乖乖開了一個新Centos7虛擬機) 鏡像&#xff1a;清華大學開源軟件鏡像站 centos/7.9.2009 安裝git sudo yum update -y sudo yum install -y git git --version安…