ผู้แต่ง: BUILDER.COM
ไม่ต้องสงสัยเลยว่าการใช้สคริปต์ JavaScript จะสามารถแสดงเวลาท้องถิ่นบนหน้าเว็บได้อย่างง่ายดายโดยการดูนาฬิกาของผู้ใช้โดยตรง แต่ถ้าคุณต้องการแสดงเวลาในภูมิภาคอื่น ตัวอย่างเช่น หากสำนักงานใหญ่ของคุณอยู่ในประเทศอื่น และคุณต้องการดูเวลา "บ้าน" แทนเวลาท้องถิ่นล่ะ
เมื่อต้องการทำเช่นนี้ จะต้องดำเนินการคำนวณเวลาต่างๆ เพื่อแปลงเวลาท้องถิ่นเป็นเวลาปลายทาง บทความนี้จะอธิบายวิธีการคำนวณเหล่านี้
ขั้นตอนที่ 1:
ขั้นตอนแรกคือการได้รับเวลาท้องถิ่น ใน JavaScript สิ่งนี้สามารถทำได้ง่าย ๆ อย่างแน่นอนโดยการเริ่มต้นวัตถุ Data()
// สร้างวัตถุ Date สำหรับตำแหน่งปัจจุบัน
d = new Date();
โดยการเรียกเมธอด getTime() ของวัตถุ Data() คุณสามารถแสดงจำนวนมิลลิวินาทีระหว่างวันที่ 1 มกราคม 1970 ถึงเวลาปัจจุบัน
// แปลงเป็น msec ตั้งแต่วันที่ 1 มกราคม 1970
localTime = d.getTime();
ขั้นตอนที่ 2:
ถัดไป ค้นหาค่าออฟเซ็ตเวลาท้องถิ่นผ่านเมธอด getTimezoneOffset() ของอ็อบเจ็กต์ Data() ตามค่าเริ่มต้น วิธีการนี้จะแสดงผลลัพธ์ค่าออฟเซ็ตโซนเวลาเป็นนาที ดังนั้นค่านี้จะถูกแปลงเป็นมิลลิวินาทีในการคำนวณก่อนหน้านี้
// รับค่าชดเชย UTC ท้องถิ่นและแปลงเป็น msec
localOffset = d.getTimezoneOffset() * 60000;
โปรดทราบว่าค่าส่งคืนที่เป็นลบของเมธอด getTimezoneOffset() บ่งชี้ว่าเวลาท้องถิ่นอยู่ก่อนเวลามาตรฐานสากล (UTC) ในขณะที่ค่าบวกกลับ ค่านี้ระบุเวลาท้องถิ่นหลังเวลาสากลเชิงพิกัด (UTC)
หมายเหตุ: ในกรณีที่คุณสงสัยว่าฉันได้ตัวคูณการคูณ 60,000 ได้อย่างไร โปรดจำไว้ว่า 1,000 มิลลิวินาทีเท่ากับหนึ่งวินาที และหนึ่งนาทีเท่ากับ 60 วินาที ดังนั้น หากต้องการแปลงนาทีเป็นมิลลิวินาที ให้คูณ 60 ด้วย 1,000 ซึ่งเท่ากับ 60,000
ขั้นตอนที่สาม
คือการเพิ่มเวลาท้องถิ่นและค่าออฟเซ็ตโซนเวลาท้องถิ่นเพื่อให้ได้เวลามาตรฐานสากล (UTC) ในปัจจุบัน
// รับเวลา UTC ในหน่วย msec
utc = localTime + localOffset;
ที่นี่ ตัวแปร utc มีเวลามาตรฐานสากล (UTC) ในปัจจุบัน อย่างไรก็ตาม เวลานี้แสดงเป็นจำนวนมิลลิวินาทีตั้งแต่วันที่ 1 มกราคม 1970 จนถึงปัจจุบัน ตอนนี้ขอแสดงไว้อย่างนี้ก่อน เนื่องจากยังมีการคำนวณอยู่บ้าง
ขั้นตอนที่สี่คือ
การรับเวลามาตรฐานสากล (UTC) จากนั้นรับค่าออฟเซ็ตรายชั่วโมงของเวลามาตรฐานสากล (UTC) ของเมืองเป้าหมาย แปลงเป็นมิลลิวินาที และเพิ่มเวลามาตรฐานสากล (UTC)
// รับและเพิ่มเวลาชดเชย UTC ของปลายทาง
// เช่น Bombay
// ซึ่งก็คือ UTC + 5.5 ชั่วโมง
offset = 5.5;
Bombay = utc + (3600000*offset);
หมายเหตุ: ในกรณีที่คุณสงสัยว่าฉันได้ 3600000 สำหรับการคูณได้อย่างไร ปัจจัย โปรดจำไว้ว่า 1,000 มิลลิวินาทีเท่ากับหนึ่งวินาที และหนึ่งชั่วโมงเท่ากับ 3,600 วินาที ดังนั้น หากต้องการแปลงชั่วโมงเป็นมิลลิวินาที ให้คูณ 3600 ด้วย 1,000 ซึ่งเท่ากับ 3600000
ในเวลานี้ บอมเบย์แบบแปรผันประกอบด้วยเวลาท้องถิ่นในมุมไบ ประเทศอินเดีย เวลาท้องถิ่นนี้แสดงเป็นจำนวนมิลลิวินาทีตั้งแต่วันที่ 1 มกราคม 1970 จนถึงปัจจุบัน แน่นอน มันไม่สมเหตุสมผล เราจึงต้องคำนวณบางอย่าง
ขั้นตอนที่ห้า
คือการเริ่มต้นวัตถุ Data() ใหม่และเรียกใช้เมธอด toLocalString() ของวัตถุนี้ เราจะแปลงค่าเวลาที่คำนวณในขั้นตอนก่อนหน้าให้เป็นสตริงวันที่/เวลาที่ทุกคนสามารถเข้าใจได้
// แปลงค่า msec เป็นสตริงวันที่
nd = new Date(bombay);
document.writeln("Bombay time is " + nd.toLocaleString() + "<br>");
การแปลงเสร็จสมบูรณ์!
หลังจากสรุป
และทำความเข้าใจขั้นตอนข้างต้นแล้ว เรามาดูสคริปต์นี้ (รายการ A) กันอีกครั้ง ซึ่งจะสร้างฟังก์ชัน calcTime() แบบกำหนดเองที่มีขนาดกะทัดรัดซึ่งดำเนินการคำนวณทั้งหมดและส่งกลับค่าเวลา
รายการ A
<html>
<head>
<script language="JavaScript">
// ฟังก์ชันคำนวณเวลาท้องถิ่น
// ในเมืองอื่น
// กำหนดฟังก์ชันออฟเซ็ต UTC ของเมือง
calcTime(เมือง, ออฟเซ็ต) {
// สร้างวัตถุวันที่สำหรับ ตำแหน่งปัจจุบัน
d = วันที่ใหม่ ();
// แปลงเป็น msec
// เพิ่มออฟเซ็ตเขตเวลาท้องถิ่น
// รับเวลา UTC เป็น msec
utc = d.getTime() + (d.getTimezoneOffset() * 60000);
// สร้างวัตถุ Date ใหม่สำหรับเมืองอื่น
// ใช้ offset ที่ให้มา
nd = new Date(utc + (3600000*offset));
// เวลาส่งคืนเป็นสตริง
ที่ส่งคืน "เวลาท้องถิ่นใน " + เมือง + " คือ " + nd.toLocaleString();
}
// รับการแจ้งเตือนเวลาบอมเบย์
(calcTime('Bombay', '+5.5'))
; รับการแจ้งเตือนเวลาสิงคโปร์
(calcTime ('สิงคโปร์', '+8'));
// รับการแจ้งเตือนเวลาลอนดอน
(calcTime ('ลอนดอน', '+1'));
</script>
</head>
<body>
< /body>
</html>
ที่นี่ ฟังก์ชัน calcTime() ยอมรับชื่อเมืองและค่าออฟเซ็ตเวลาสากลเชิงพิกัด (UTC) (เป็นชั่วโมง) จากนั้นจะทำการคำนวณทั้งหมดที่อธิบายไว้ข้างต้นเป็นการภายใน และส่งกลับสตริงที่มีเวลาท้องถิ่นสำหรับเมืองนี้
นี่คือตัวอย่างบางส่วนของผลลัพธ์จากรายการ A
เวลาท้องถิ่นของมุมไบ คือ 16:43:51 น. ของวันจันทร์
ที่ 1 สิงหาคม 2548 เวลาท้องถิ่นของสิงคโปร์ คือ 19:13:51 น. ของวันจันทร์ที่ 1 สิงหาคม 2548
เวลาท้องถิ่นของลอนดอน คือ 1 สิงหาคม 2548 วันจันทร์ 12:13:51 น.
ครั้งต่อไปที่คุณนั่งลงเพื่อเขียนสคริปต์เขตเวลาสำหรับหน้าเว็บของคุณ สคริปต์นี้หวังว่าจะช่วยคุณประหยัดเวลาได้บ้าง สนุก! -