Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การแก้ไขสตริงเวลาที่ผิดปกติใน JavaScript

ปัญหา

เราต้องเขียนฟังก์ชัน JavaScript ที่รับสตริงเวลาในรูปแบบ "HH:MM:SS" แต่สตริงเวลาหลายตัวเสียหาย โดยส่วนนาที (MM) อาจเกิน 60 และวินาที (SS) ก็อาจเกิน 60 เช่นกัน ฟังก์ชันควรแก้ไขสตริงและคืนค่าสตริงที่ถูกต้อง

เช่น:

"08:11:71" → "08:12:11"

ตัวอย่าง

โค้ดตัวอย่างด้านล่าง:

const str = '08:11:71';
const rectifyTime = (str = '') => {
  if (!Boolean(str)) {
    return str;
  }
  const re = /^(\d\d):(\d\d):(\d\d)$/;
  if (!re.test(str)) {
    return null;
  }
  let [h, m, s] = str.match(re).slice(1, 4).map(Number);
  let time = h * 3600 + m * 60 + s;
  s = time % 60;
  m = (time / 60 | 0) % 60;
  h = (time / 3600 | 0) % 24;
  return [h, m, s]
    .map(String)
    .join(':');
};
console.log(rectifyTime(str));

ผลลัพธ์

08:12:11

คำอธิบายเพิ่มเติม

วิธีแก้คือแปลงเป็นวินาทีทั้งหมด แล้วคำนวณย้อนกลับเป็น ชั่วโมง:นาที:วินาที ใช้ bitwise OR (|0) แทน Math.floor() เพื่อความเร็ว ควรจัดการกรณีเวลาลบหรือเกิน 24 ชั่วโมง