簡體   English   中英

在Javascript中格式化自定義日期時間戳

[英]Formatting custom date timestamp in Javascript

我有一個自定義日期格式,如下所示: new Date("02:56:12,80")

我開始手動解析出小時、分鍾、秒和毫秒,但這很乏味,而且代碼很多,可能容易出錯。 是否可以使用自定義格式來匹配此字符串以轉換為秒?

這就是我從幾秒鍾開始生成這種格式的方式:

const formatTimeFromSeconds = (seconds) => {
  dateObj = new Date(seconds * 1000);
  hours = dateObj.getUTCHours();
  minutes = dateObj.getUTCMinutes();
  seconds = dateObj.getSeconds();
  milliseconds = dateObj.getMilliseconds();

  timeString =
    hours.toString().padStart(2, "0") +
    ":" +
    minutes.toString().padStart(2, "0") +
    ":" +
    seconds.toString().padStart(2, "0") +
    "," +
    milliseconds.toString().padStart(2, "0");

  return timeString;
};

試圖:

const dateToSeconds = (time) => {
  try {
    const times = time.split(":")
    const secondDelimit = times[2].split(".")
    const secondsConversion = parseInt(secondDelimit[0])
    const hoursToSeconds = parseInt(times[0]) * 60 * 60
    const minutesToSeconds = parseInt(times[1]) * 60 

    const totalSeconds = minutesToSeconds + hoursToSeconds + secondsConversion
    return `${totalSeconds}.${secondDelimit[1]}`
  } catch (err) {
    console.error(err)
  }
}

您可以使用 ISO 格式 (YYYY-mm-ddThh:mm:ss.sssZ) 並使用正則表達式來提取確切的部分,用逗號替換點:

const formatTimeFromSeconds = (seconds) => {
    const date = new Date(seconds*1000);
    return date.toISOString().match(/^.*T(.*)\d{1}Z$/)[1].replace(".",",");
}

這樣您就不必手動提取每個部分。

正則表達式將 T 和 Z 之前的最后一個數字之間的所有文本提取到一個組中。獲得該組(結果數組的索引 1)並對其進行替換。

您可以為轉換過程中的任何錯誤添加 try/catch,以使函數對無效參數更加健壯,或向參數添加驗證

安裝 Luxon: https ://moment.github.io/luxon/#/?id=luxon

npm install luxon

然后就是一個簡單的問題...

const { DateTime } = require( 'luxon' ) ;

const dt = DateTime.local( 2022, 6, 18, 22, 37, 9, 456 ) ;

const formatted = dt.toFormat('HH:mm:ss,uu') ; // use 'hh' for 12-hour time

console.log(`formatted: ${formatted}`) ;

並得到

formatted: 22:37:09,45

如果你想自己動手...

dt = new Date();
console.log(`formatted: ${dt2time(dt)}`)

function dt2time(dt) {
    const hh = str(             dt.getHours()               );
    const mm = str(             dt.getMinutes()             ) ;
    const ss = str(             dt.getSeconds()             ) ;
    const tt = str( Math.round( dt.getMilliseconds() / 10 ) ) ;
    return `${hh}:${mm}:${ss},${tt}`;

    function str(n) {
        const s = String(n).padStart(2,'0');
        return s;
    }

}

但是使用 Luxon。 它很小。 它支持本地化。 它很干凈。 您不編寫的代碼是您不必維護的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM