ฉันมีข้อกำหนดที่คล้ายกันดังนี้: แปลงเวลาในรูปแบบ HH: MM: SS เป็นวินาทีเท่านั้นหรือไม่
แต่ในจาวาสคริปต์ ฉันได้เห็นตัวอย่างมากมายของการแปลงวินาทีเป็นรูปแบบต่างๆ แต่ไม่ใช่ HH: MM: SS เป็นวินาที ความช่วยเหลือใด ๆ จะได้รับการชื่นชม
ฉันมีข้อกำหนดที่คล้ายกันดังนี้: แปลงเวลาในรูปแบบ HH: MM: SS เป็นวินาทีเท่านั้นหรือไม่
แต่ในจาวาสคริปต์ ฉันได้เห็นตัวอย่างมากมายของการแปลงวินาทีเป็นรูปแบบต่างๆ แต่ไม่ใช่ HH: MM: SS เป็นวินาที ความช่วยเหลือใด ๆ จะได้รับการชื่นชม
DD
ในHH:MM:DD
?
คำตอบ:
ลองสิ่งนี้:
var hms = '02:04:33'; // your input string
var a = hms.split(':'); // split it at the colons
// minutes are worth 60 seconds. Hours are worth 60 minutes.
var seconds = (+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2]);
console.log(seconds);
String.prototype.toSeconds = function () { if (!this) return null; var hms = this.split(':'); return (+hms[0]) * 60 * 60 + (+hms[1]) * 60 + (+hms[2] || 0); }
หมายเหตุ: || 0
ในตอนท้ายเหมาะสำหรับการใช้งานโค้ดนี้ - ป้องกันปัญหาเกี่ยวกับการแสดงเวลา (ยังใช้ได้) ของ HH: MM (อินพุตประเภท Chrome = "เวลา" จะแสดงผลในรูปแบบนี้เมื่อวินาที = 0)
hh:mm
ไม่ได้มีเพียงseconds
ในกรณีนี้เท่านั้นที่ฉันต้องแก้ไข .. ?
var seconds = (+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2]);
tovar seconds = (+a[0]) * 60 * 60 + (+a[1]) * 60;
ฟังก์ชันนี้จัดการ "HH: MM: SS" เช่นเดียวกับ "MM: SS" หรือ "SS"
function hmsToSecondsOnly(str) {
var p = str.split(':'),
s = 0, m = 1;
while (p.length > 0) {
s += m * parseInt(p.pop(), 10);
m *= 60;
}
return s;
}
สิ่งนี้สามารถทำได้ค่อนข้างยืดหยุ่นดังต่อไปนี้:
'01:02:03'.split(':').reduce((acc,time) => (60 * acc) + +time);
เนื่องจากแต่ละหน่วยเวลาภายในชั่วโมงนาทีและวินาทีมีค่ามากกว่า 60 หน่วยที่เล็กกว่า เวลาจะแบ่งออกเป็นส่วนประกอบของชั่วโมงนาทีและวินาทีจากนั้นลดลงเป็นวินาทีโดยใช้มูลค่าสะสมของหน่วยที่สูงขึ้นคูณด้วย 60 เมื่อผ่านไปแต่ละหน่วย
+time
ถูกนำมาใช้ในการลงเวลาในการตัวเลข
โดยพื้นฐานแล้วจะทำ: (60 * ((60 * HHHH) + MM)) + SS
หากผ่านไปเพียงไม่กี่วินาทีผลลัพธ์จะเป็นสตริงดังนั้นเพื่อแก้ไขว่าเราสามารถส่งผลลัพธ์ทั้งหมดเป็น int:
+('03'.split(':').reduce((acc,time) => (60 * acc) + +time));
HH:MM:SS
เช่นเดียวกับMM:SS
ในขณะที่คำตอบที่ยอมรับไม่ได้
'03'.split(':').reduce((acc,time) => (60 * acc) + +time, 0);
ล้มเหลวเนื่องจากส่งคืนสตริงที่ไม่คาดคิด:'03'.split(':').reduce((acc,time) => (60 * acc) + +time);
เนื่องจากฟังก์ชันgetTimeของอ็อบเจกต์ Date ได้รับมิลลิวินาทีตั้งแต่ 1970/01/01 เราสามารถทำได้:
var time = '12:23:00';
var seconds = new Date('1970-01-01T' + time + 'Z').getTime() / 1000;
แปลงhh:mm:ss
สตริงเป็นวินาทีในหนึ่งบรรทัด นอกจากนี้ยังได้รับอนุญาตh:m:s
และรูปแบบmm:ss
, m:s
ฯลฯ
'08:45:20'.split(':').reverse().reduce((prev, curr, i) => prev + curr*Math.pow(60, i), 0)
hh:mm:ss
สตริงเป็นวินาทีในหนึ่งบรรทัด นอกจากนี้ยังได้รับอนุญาตh:m:s
และรูปแบบmm:ss
, m:s
ฯลฯ
reverse()
: '00: 01: 11'.split (':') ลด ((val, entry, i) => val + entry * (3600 / Math.pow (60, i)), 0 ) === 71
mm:ss
นี้จะทำงานไม่ถูกต้อง
ลอง
time="12:12:12";
tt=time.split(":");
sec=tt[0]*3600+tt[1]*60+tt[2]*1;
วิธีการคงที่ของ Javascript Date.UTC()
ทำเคล็ดลับ:
alert(getSeconds('00:22:17'));
function getSeconds(time)
{
var ts = time.split(':');
return Date.UTC(1970, 0, 1, ts[0], ts[1], ts[2]) / 1000;
}
ต่อไปนี้เป็นแบบฟอร์มที่อ่านได้ง่ายขึ้นสำหรับคำตอบเดิมที่ได้รับการอนุมัติ
const getSeconds = (hms: string) : number => {
const [hours, minutes, seconds] = hms.split(':');
return (+hours) * 60 * 60 + (+minutes) * 60 + (+seconds);
};
new Date(moment('23:04:33', "HH:mm")).getTime()
เอาต์พุต: 1499755980000 (เป็นมิลลิวินาที) (1499755980000/1000) (เป็นวินาที)
หมายเหตุ: ผลลัพธ์นี้คำนวณแตกต่างจาก 1970-01-01 12: 0: 0 ถึงตอนนี้และเราต้องใช้โมเมนต์ js
ฟังก์ชันนี้ใช้ได้กับ MM: SS เช่นกัน:
const convertTime = (hms) => {
if (hms.length <3){
return hms
} else if (hms.length <6){
const a = hms.split(':')
return hms = (+a[0]) * 60 + (+a[1])
} else {
const a = hms.split(':')
return hms = (+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2])
}
}
นำมาจากโซลูชันที่กำหนดโดย Paul https://stackoverflow.com/a/45292588/1191101แต่ใช้สัญกรณ์ฟังก์ชันเก่าดังนั้นจึงสามารถใช้ในเอ็นจิ้น js อื่น ๆ ได้ (เช่น java Rhino)
function strToSeconds (stime)
{
return +(stime.split(':').reduce(function (acc,time) { return +(60 * acc) + +time }));
}
หรือเพียงแค่อ่านเพิ่มเติม
function strToSeconds (stime)
{
var tt = stime.split(':').reverse ();
return ((tt.length >= 3) ? (+tt[2]): 0)*60*60 +
((tt.length >= 2) ? (+tt[1]): 0)*60 +
((tt.length >= 1) ? (+tt[0]): 0);
}
function parsehhmmsst(arg) {
var result = 0, arr = arg.split(':')
if (arr[0] < 12) {
result = arr[0] * 3600 // hours
}
result += arr[1] * 60 // minutes
result += parseInt(arr[2]) // seconds
if (arg.indexOf('P') > -1) { // 8:00 PM > 8:00 AM
result += 43200
}
return result
}
$('body').append(parsehhmmsst('12:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('1:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('2:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('3:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('4:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('5:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('6:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('7:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('8:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('9:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('10:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('11:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('12:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('1:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('2:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('3:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('4:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('5:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('6:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('7:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('8:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('9:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('10:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('11:00:00 PM') + '<br>')
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
คุณสามารถทำสิ่งนี้แบบไดนามิก - ในกรณีที่คุณพบไม่เพียง: HH: mm: ss แต่ยังรวมถึง mm: ss หรือแม้แต่ ss เพียงอย่างเดียว
var str = '12:99:07';
var times = str.split(":");
times.reverse();
var x = times.length, y = 0, z;
for (var i = 0; i < x; i++) {
z = times[i] * Math.pow(60, i);
y += z;
}
console.log(y);
นี่เป็นวิธีแก้ปัญหาที่ชัดเจนและเข้าใจง่ายที่สุด:
function convertDurationtoSeconds(duration){
const [hours, minutes, seconds] = duration.split(':');
return Number(hours) * 60 * 60 + Number(minutes) * 60 + Number(seconds);
};
const input = '01:30:45';
const output = convertDurationtoSeconds(input);
console.log(`${input} is ${output} in seconds`);