[英]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.