如何將時間字串轉換1m15s為75s,75或75000理想情況下使用momentjs.
我嘗試使用決議該字串,new Date('1m1s')但它給出了Invalid Date.
我不想訴諸正則運算式:
const second = (function () {
const countdownStep = '1h1m1s'.match(
/(?:(?<h>\d{0,2})h)?(?:(?<m>\d{0,2})m)?(?:(?<s>\d{0,2})s)?/i
);
return (
(countdownStep.groups.h
? parseInt(countdownStep.groups.h) * 3600
: 0)
(countdownStep.groups.m
? parseInt(countdownStep.groups.m) * 60
: 0)
(countdownStep.groups.s ? parseInt(countdownStep.groups.s) : 0)
);
})();
uj5u.com熱心網友回復:
可以使用momentjs的duration介面:
let s = '1m15s';
// convert to duration format and pass to momentjs
let secs = moment.duration('PT' s.toUpperCase()).as("seconds");
console.log("seconds: ", secs);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
如果沒有庫,它可能是:
const unit = { s: 1, m: 60, h: 60*60 };
let s = '1m15s';
let secs = s.toLowerCase().match(/\d ./g)
.reduce((acc, p) => acc parseInt(p) * unit[p.at(-1)], 0);
console.log("seconds: ", secs);
uj5u.com熱心網友回復:
另一種使用純js的方法:
const getSecondsFromString = (str) => {
const hourIndex = str.indexOf("h")
const minuteIndex = str.indexOf("m")
const secondIndex = str.indexOf("s")
let hours = 0
let minutes = 0
let seconds = 0
if (hourIndex !== -1) {
hours = Number(str.substring(0, hourIndex))
}
if (minuteIndex !== -1) {
if (hourIndex !== -1) {
minutes = Number(str.substring(hourIndex 1, minuteIndex))
} else {
minutes = Number(str.substring(0, minuteIndex))
}
}
if (secondIndex !== -1) {
if (minuteIndex !== -1) {
seconds = Number(str.substring(minuteIndex 1, secondIndex))
} else if (hourIndex !== -1) {
seconds = Number(str.substring(hourIndex 1, secondIndex))
} else {
seconds = Number(str.substring(0, secondIndex))
}
}
return hours * 3600 minutes * 60 seconds
}
uj5u.com熱心網友回復:
在 O(n) 中沒有子字串/替換的另一種方法;
const getSecondsFromTimeString = (timeString) => {
let numberBeforeNextChar = 0;
let seconds = 0;
const symbolToSecondMap = {
"s" : 1,
"m" : 60,
"h" : 60*60,
"d" : 60*60*24
};
for (let i = 0; i < timeString.length; i ) {
let char = timeString.charAt(i);
if(( char) <= 9 && ( char) >= 0 ){
numberBeforeNextChar = (numberBeforeNextChar * 10) parseInt(char);
continue;
}
if(char.toLowerCase() == char.toUpperCase()){
throw "Non alphanumeric symbol encountered";
}
if(symbolToSecondMap[char] === undefined){
throw "Invalid date alphabet encountered";
}
seconds = seconds (numberBeforeNextChar * symbolToSecondMap[char]);
numberBeforeNextChar = 0;
}
return seconds;
}
console.log(getSecondsFromTimeString('1s'))
console.log(getSecondsFromTimeString('10s'))
console.log(getSecondsFromTimeString('1s4m10d3h'))
console.log(getSecondsFromTimeString('1s4m03h1h'))
console.log(getSecondsFromTimeString('10d'))
uj5u.com熱心網友回復:
我試過了,對你有幫助嗎
let d = '1H1s';
d = d.toLowerCase();
let sec = 0;
if(d.indexOf('h') > -1) {
if (d.indexOf('m') == -1) {
d = d.substring(0, d.indexOf('h') 1) "0m" d.substring(d.indexOf('h') 1);
}
}
let newDs = d.replace('h',':').replace('m',':').replace('s','').split(':');
newDs.forEach((v, i) => sec = Math.pow(60, (newDs.length - i - 1)) * v);
console.log(sec);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/450487.html
標籤:javascript 时刻
上一篇:process.env拋出UncaughtReferenceError但process.env.NODE_ENV沒有
