การตั้งค่าเขตเวลาใน PHP เขตเวลาวันที่ - ตั้งค่าเขตเวลาใน PHP และ MySQL วิธีเปลี่ยนเขตเวลา php

หากในกระบวนการจัดการโฮสติ้งเสมือนมีความจำเป็นต้องเปลี่ยนเขตเวลาเริ่มต้น การดำเนินการนี้สามารถดำเนินการได้อย่างง่ายดายในหลายขั้นตอน ซึ่งอธิบายไว้ด้านล่าง

การเปลี่ยนเขตเวลาผ่านเลือกเวอร์ชัน PHP

หากต้องการเปลี่ยนเขตเวลา ให้ไปที่ cPanel -> ซอฟต์แวร์-> เลือกเวอร์ชัน PHP -> สลับเป็นตัวเลือก PHP

ขั้นตอนต่อไปคือการเปลี่ยนค่าของตัวแปร date.timezone เป็นโซนเวลาที่คุณต้องการ คุณสามารถดูรายการเขตเวลาที่ใช้ได้ในย่อหน้าสุดท้ายของบทความ

หลังจากทำการเปลี่ยนแปลงที่จำเป็นแล้ว สิ่งสำคัญคือต้องคลิกที่ปุ่ม "บันทึกการเปลี่ยนแปลง" ซึ่งอยู่ด้านล่าง หน้า PHPตัวเลือก

เพื่อให้แน่ใจว่ามีการใช้ค่าเขตเวลาที่ระบุ คุณสามารถใช้ฟังก์ชัน PHP ได้ phpinfo()ซึ่งแสดงข้อมูลเกี่ยวกับการติดตั้งทั้งหมด พารามิเตอร์ PHP- หากต้องการทำสิ่งนี้ ให้สร้างใน public_html แล้วคลิกปุ่ม "ไฟล์" ในเมนูตัวจัดการ

  • ในฟิลด์ชื่อไฟล์ใหม่ ให้ระบุ เช่น phpinfo.phpจากนั้นคลิกที่ปุ่มสร้างไฟล์ใหม่

  • ส่งผลให้ได้ไฟล์ที่มี ชื่อที่ระบุจะปรากฏอยู่ในรายชื่อผู้อื่นบนโฮสติ้ง
  • ถัดไปคุณต้องเปิดไฟล์นี้เพื่อแก้ไข โดยคลิกซ้ายที่ ไฟล์ที่ต้องการจากนั้นในเมนูโปรแกรมเลือกจ่ายงานให้คลิกที่ปุ่มเปลี่ยน
  • ในแบบฟอร์มที่ปรากฏขึ้น ให้ปล่อยพารามิเตอร์เริ่มต้นทั้งหมดไว้แล้วคลิกปุ่มแก้ไขเพื่อเปิดโปรแกรมแก้ไขข้อความ

  • ในหน้าต่างที่เปิดขึ้น คุณต้องป้อนรหัสต่อไปนี้:

หลังจากนั้น ให้บันทึกไฟล์และเปิดในเบราว์เซอร์ของคุณ ใน ในตัวอย่างนี้ไฟล์จะอยู่ที่:

http://main_domain/phpinfo.php

ในหน้าที่เปิดขึ้น ให้ค้นหาส่วนวันที่ซึ่งจะมีตารางที่มีค่าเขตเวลาปัจจุบัน ในกรณีนี้ โซนด้านบนจะปรากฏขึ้น ยุโรป/เคียฟ.

เสร็จสิ้นกระบวนการเปลี่ยนเขตเวลา

รายการเขตเวลาเพื่อกำหนดค่าเขตเวลา

นอกจากนี้ เรายังแนบรายการค่าเขตเวลาที่เป็นไปได้ไว้ด้านล่าง:

แอฟริกา/ไคโร แอฟริกา/คาซาบลังกา แอฟริกา/ฮาราเร แอฟริกา/มอนโรเวีย แอฟริกา/ไนโรบี อเมริกา/โบโกตา อเมริกา/บัวโนสไอเรส อเมริกา/การากัส อเมริกา/ชิวาวา อเมริกา/La_Paz อเมริกา/ลิมา อเมริกา/มาซาตลัน อเมริกา/เม็กซิโก_ซิตี้ อเมริกา/มอนเตร์เรย์ อเมริกา/ซานติอาโก อเมริกา/ติฮัวนา เอเชีย/ อัลมาตี เอเชีย/แบกแดด เอเชีย/บากู เอเชีย/กรุงเทพฯ เอเชีย/ฉงชิ่ง เอเชีย/ธากา เอเชีย/ฮ่องกง เอเชีย/อีร์คุตสค์ เอเชีย/จาการ์ตา เอเชีย/เยรูซาเล็ม เอเชีย/คาบูล เอเชีย/การาจี เอเชีย/กาฐมา ณ ฑุ เอเชีย/โกลกาตา เอเชีย/ครัสโนยาสค์ เอเชีย/กัวลาลัมเปอร์_ลัมเปอร์ เอเชีย/คูเวต เอเชีย /มากาดาน เอเชีย/มัสกัต เอเชีย/โนโวซีบีร์สค์ เอเชีย/ริยาด เอเชีย/โซล เอเชีย/สิงคโปร์ เอเชีย/ไทเป เอเชีย/ทาชเคนต์ เอเชีย/ทบิลิซี เอเชีย/เตหะราน เอเชีย/โตเกียว เอเชีย/อูลานบาตอร์ เอเชีย/อุรุมชี เอเชีย/วลาดิวอสต็อก เอเชีย/ยาคุตสค์ เอเชีย/เยคาเทรินเบิร์ก เอเชีย/เยเรวาน แอตแลนติก/อะซอเรส แอตแลนติก/เคป_เวิร์ด แอตแลนติก/สแตนลีย์ ออสเตรเลีย/แอดิเลด ออสเตรเลีย/บริสเบน ออสเตรเลีย/แคนเบอร์รา ออสเตรเลีย/ดาร์วิน ออสเตรเลีย/โฮบาร์ต ออสเตรเลีย/เมลเบิร์น ออสเตรเลีย/เพิร์ธ ออสเตรเลีย/ซิดนีย์ แคนาดา/แอตแลนติก แคนาดา/นิวฟันด์แลนด์ แคนาดา/ซัสแคตเชวัน ยุโรป/อัมสเตอร์ดัม ยุโรป/เอเธนส์ ยุโรป/ เบลเกรดยุโรป/เบอร์ลินยุโรป/บราติสลาวายุโรป/บรัสเซลส์ยุโรป/บูคาเรสต์ยุโรป/บูดาเปสต์ยุโรป/โคเปนเฮเกนยุโรป/ดับลินยุโรป/เฮลซิงกิยุโรป/อิสตันบูลยุโรป/เคียฟยุโรป/ลิสบอนยุโรป/ลูบลิยานายุโรป/ลอนดอนยุโรป/มาดริดยุโรป/มินสค์ยุโรป/มอสโกยุโรป /ปารีสยุโรป/ปรากยุโรป/ริกายุโรป/โรมยุโรป/ซาราเยโวยุโรป/สโกเปียยุโรป/โซเฟียยุโรป/สตอกโฮล์มยุโรป/ทาลลินน์ยุโรป/เวียนนายุโรป/วิลนีอุสยุโรป/โวลโกกราดยุโรป/วอร์ซอยุโรป/ซาเกร็บ กรีนแลนด์แปซิฟิก/โอ๊คแลนด์แปซิฟิก/ฟิจิแปซิฟิก/ กวมแปซิฟิก/มิดเวย์แปซิฟิก/พอร์ต_มอร์สบี สหรัฐอเมริกา/อลาสกา สหรัฐอเมริกา/แอริโซนา สหรัฐอเมริกา/สหรัฐอเมริกากลาง/สหรัฐอเมริกาตะวันออก/อินเดียนาตะวันออก สหรัฐอเมริกา/ฮาวาย สหรัฐอเมริกา/สหรัฐอเมริกาบนภูเขา/สหรัฐอเมริกาแปซิฟิก/ซามัว

ต้องการชื่อใหม่สำหรับเว็บไซต์ของคุณหรือไม่? ได้จากเรา

สายพานอัตโนมัติ (6)

ฉันจำเป็นต้องรู้ว่าผู้ใช้ของฉันอยู่ในเขตเวลาใดโดยพิจารณาจากส่วนหัว IP หรือ HTTP

ฉันได้รับคำตอบมากมายสำหรับคำถามนี้ แต่ฉันไม่เข้าใจคำตอบ บางคนบอกว่าใช้ -new Date().getTimezoneOffset()/60() แต่สิ่งนี้หมายความว่าอย่างไร?

ฉันมี date_default_timezone_set("Asia/Calcutta"); ในรูทของหน้าของฉัน (index.php) ดังนั้นฉันต้องตั้งค่าเขตเวลาแบบไดนามิกและตั้งค่าเป็นเอเชีย/กัลกัตตาแทน

คำตอบ

ข้อมูลโซนเวลาของเบราว์เซอร์ไม่ได้เป็นส่วนหนึ่งของข้อกำหนด HTTP ดังนั้นคุณจึงไม่สามารถรับข้อมูลจากส่วนหัวเพียงอย่างเดียวได้

หากคุณมีพิกัดตำแหน่ง (เช่น ด้วย อุปกรณ์เคลื่อนที่ GPS) คุณสามารถค้นหาเขตเวลาของคุณโดยใช้วิธีใดวิธีหนึ่งเหล่านี้ อย่างไรก็ตาม ตำแหน่งทางภูมิศาสตร์ตามที่อยู่ IP ไม่ใช่วิธีแก้ปัญหาที่ดี เนื่องจากมักจะเป็นที่อยู่ IP ของ ISP หรือพร็อกซีเซิร์ฟเวอร์ ซึ่งอาจอยู่ในเขตเวลาอื่น

มีกลยุทธ์บางอย่างที่คุณสามารถใช้เพื่อลองตรวจจับเขตเวลา เช่น การใช้ไลบรารี jsTimeZoneDetect ซึ่งเป็นจุดเริ่มต้นที่ดี แต่ยังไม่สมบูรณ์พอที่จะคุณไม่สามารถพึ่งพามันเพียงลำพังได้ หากคุณใช้ Moment.js Moment-time จะมีฟังก์ชันในตัวที่เรียกว่า Moment.tz.guess() ซึ่งทำสิ่งเดียวกัน

สิ่งที่ผิดปกติกับแนวคิดในการใช้ฟังก์ชัน getTimezoneOffset() ของ JavaScript ก็คือ คุณจะไม่ได้รับเขตเวลา - มีเพียงออฟเซ็ตเดียวสำหรับวันที่ที่ระบุ ดูส่วนวิกิหัวข้อแท็ก TimeZone ที่ชื่อว่า "TimeZone! = ออฟเซ็ต"

ไม่ว่าคุณจะมองอย่างไร ท้ายที่สุดแล้ว คุณจะต้องตัดสินใจเลือกหนึ่งในสองแนวทาง:

  • ขอให้ผู้ใช้แจ้งเขตเวลาของตนจากรายการแบบเลื่อนลงหรือการควบคุมเขตเวลาตามแผนที่
  • ส่งเวลาไปยังเบราว์เซอร์ใน UTC เท่านั้น และใช้ JavaScript ในเบราว์เซอร์เพื่อแปลงเป็นเขตเวลาท้องถิ่นใดก็ตามที่ผู้ใช้สามารถตั้งค่าคอมพิวเตอร์ของตนได้

ฉันพูดถึงเรื่องนี้โดยละเอียด (จากมุมมองของ AC #) ในคำตอบนี้

ไม่มีเขตเวลาในส่วนหัว HTTP แต่ประเทศ (ตัวย่อ) อยู่ในส่วนหัว ACCEPT_LANGUAGE มันจะเป็น "en-US" (USA - รหัสประเทศ) สามารถใช้ร่วมกับข้อมูล JavaScript เพื่อให้ทราบเขตเวลาของผู้ใช้

นี่คือสิ่งที่ฉันใช้ใน JS:

เขตเวลาของฟังก์ชัน() ( var now = new Date(); var jano = new Date(now.getFullYear(), 0, 1).getTimezoneOffset()/-60; var julo = new Date(now.getFullYear(), 6 , 1).getTimezoneOffset()/-60; var tz = Math.min(jano, julo); if (จาโน != จูโล) tz += ((jano< julo) ? "S" : "W") + Math.abs(jano - julo); return tz; }

ซึ่งจะส่งคืนสตริงเช่น "-6S1" สำหรับโซนกึ่งกลาง (การชดเชยเวลามาตรฐานคือ -6 ชั่วโมง เวลาออมแสงจะมีผลในฤดูร้อนและเพิ่ม 1 ชั่วโมง) ฉันใช้คุกกี้เพื่อทำให้ PHP สามารถเข้าถึงได้ PHP ค้นหาฐานข้อมูล TZ เพื่อหาโซนที่ตรงกับประเทศนี้และประเทศ สำหรับที่นี่ (สหรัฐอเมริกา -6S1) มี 7 โซนที่สอดคล้องกัน โซนแรกคือ “อเมริกา / ชิคาโก”

อย่างไรก็ตาม มีสองโซนในฐานข้อมูลที่ DST เพิ่มอย่างอื่นที่ไม่ใช่ 1 ชั่วโมง: เกาะลอร์ดฮาว (10.5W0.5) และสถานีโทรลล์ แอนตาร์กติกา (0W2)

หนึ่งในนั้นคือการถามพวกเขา! โดยเฉพาะอย่างยิ่งในระบบสมาชิกที่คุณสามารถบันทึก/ลงทะเบียนผู้ใช้ได้ - ให้ทางเลือกแก่พวกเขา ณ จุดนั้น เรียบง่ายแต่แม่นยำ

มันใช้งานได้ดี...

Echo addFormatOption("ago", function (DateTime $datetime) ( return floor((time() - $datetime->getTimestamp()) / 86400) . "days ago"; )); $dater->format(time() - 60*60*24*7, "d F Y, ago"); // 14 มีนาคม 2556 7 วันที่ผ่านมา

รองรับสถานที่เกิดเหตุ $dater->setLocale(Dater\Locale\En() ใหม่); เสียงสะท้อน $dater->วันที่(); // 21/03/2013 echo $dater->ตอนนี้("j F Y"); // 21 มีนาคม 2556 $dater->setLocale(DaterDater::getLocaleByCode("ru")); เสียงสะท้อน $dater->วันที่(); // 21/03/2013 echo $dater->ตอนนี้("j F Y"); // 21 มีนาคม 2556 วิธีการมาตรฐานสำหรับเซิร์ฟเวอร์และรูปแบบผู้ใช้ โดยคำนึงถึงสถานที่เกิดเหตุ echo $dater->date(); // 21/03/2013 (เขตเวลาของลูกค้า ขึ้นอยู่กับสถานที่) echo $dater->time(); // 5:41 AM (เขตเวลาไคลเอนต์ ขึ้นอยู่กับสถานที่) echo $dater->datetime(); // 21/03/2013 5:41 (เขตเวลาของลูกค้า ขึ้นอยู่กับสถานที่) echo $dater->isoDate(); // 21-03-2556 (เขตเวลาไคลเอนต์) echo $dater->isoTime(); // 05:41:28 (เขตเวลาไคลเอนต์) echo $dater->isoDatetime(); // 2013-03-21 05:41:28 (เขตเวลาไคลเอนต์) echo $dater->serverDate(); // 21-03-2556 (เขตเวลาเซิร์ฟเวอร์) echo $dater->serverTime(); // 09:41:28 (เขตเวลาเซิร์ฟเวอร์) echo $dater->serverDatetime(); // 2013-03-21 09:41:28 (เขตเวลาเซิร์ฟเวอร์) แปลงวันที่-เวลาโดยคำนึงถึงเขตเวลา $dater->setServerTimezone("Europe/Moscow"); $dater->setClientTimezone("ยุโรป/ลอนดอน"); เสียงสะท้อน $dater->serverDatetime(); // 2013-03-21 08:18:06 echo $dater->isoDatetime(); // 2013-03-21 04:18:06 echo $dater->time(); // 04:18
เป็นมูลค่าการกล่าวขวัญว่าเมื่อโทร $dater->setServerTimezone("Europe/Moscow"); ฟังก์ชัน date() และคลาส DateTime จะส่งคืนเวลาในเขตเวลาที่ตั้งใหม่ หากต้องการปิดการใช้งานนี้ ให้ส่งค่า false ไปที่เมธอดเป็นพารามิเตอร์ตัวที่สอง และสุดท้ายคือโค้ดที่สัญญาไว้ซึ่งจะช่วยให้คุณสามารถกำหนดโซนเวลาของลูกค้าได้โดยอัตโนมัติ และแสดงวันที่และเวลาปัจจุบัน:

ในส่วนหัวของสคริปต์เริ่มต้นส่วนกลาง

$dater = ใหม่ Dater\Dater(ใหม่ Dater\Locale\Ru(), "ยุโรป/มอสโก"); $timezoneDetector = Dater\TimezoneDetector ใหม่(); $dater->setClientTimezone($timezoneDetector->getClientTimezone()); $dataHandler = Dater\DataHandler ใหม่($dater); $dataHandler->enableOutputTimezoneHandler(); $dataHandler->convertRequestDataToServerTimezone();
ในเทมเพลตหลัก


ขณะนี้สตริง YYYY-MM-DD HH:MM:SS ทั้งหมดในข้อมูลที่ส่งจะถูกแทนที่ด้วย YYYY-MM-DD HH:MM:SS ในเขตเวลาไคลเอ็นต์ที่ตรวจพบโดยอัตโนมัติ หากคุณต้องการแสดงวันที่-เวลาในรูปแบบเฉพาะ ให้เพิ่ม YYYY-MM-DD HH:MM:SS[Н m d] หรือ YYYY-MM-DD HH:MM:SS โดยที่ date เป็นรูปแบบที่ผูกกับ Dater . คุณยังสามารถส่งออกและจัดรูปแบบรูปแบบการประทับเวลา: 1363853607

ตัวอย่างเช่นข้อมูลต่อไปนี้

รูปแบบการประทับเวลา: 1363238564 (จะไม่เปลี่ยนแปลง) รูปแบบการประทับเวลา: 1363238564 รูปแบบการประทับเวลา: 1363238564 รูปแบบวันที่เวลาของเซิร์ฟเวอร์: 2013-03-14 09:22:44 รูปแบบวันที่เวลาของเซิร์ฟเวอร์: 2013-03-14 09:22:44 รูปแบบวันที่และเวลาของเซิร์ฟเวอร์: 2013 - 03-14 09:22:44 น
จะถูกแปลงเป็นอัตโนมัติ

รูปแบบการประทับเวลา: 1363238564 (จะไม่เปลี่ยนแปลง) รูปแบบการประทับเวลา: 2013/03/14 รูปแบบการประทับเวลา: 14/03/2013 07:22 รูปแบบวันที่และเวลาของเซิร์ฟเวอร์: 14/03/2013 รูปแบบวันที่และเวลาของเซิร์ฟเวอร์: 07:22 รูปแบบวันที่และเวลาของเซิร์ฟเวอร์: 2013- 03-14 07:22:44

ในเวลาเดียวกัน $dataHandler->convertRequestDataToServerTimezone(); จะทำให้แน่ใจว่าข้อมูล YYYY-MM-DD HH:MM:SS ทั้งหมดที่มาจากไคลเอนต์จะถูกแปลงเป็นโซนเวลาของเซิร์ฟเวอร์ YYYY-MM-DD HH:MM:SS ด้วยวิธีนี้ เซิร์ฟเวอร์จะไม่มีทางรู้ว่าไคลเอนต์กำลังรับและส่งวันที่-เวลาในเขตเวลาอื่น

เป็นที่ยอมรับว่านี่เป็นวิธีที่ค่อนข้างจะยุ่งยากเล็กน้อยในการจัดการเขตเวลา วิธีแก้ปัญหาที่เป็นสากลและเป็นแบบดั้งเดิมมากขึ้นคือการหลีกเลี่ยงการใช้ $dataHandler->enableOutputTimezoneHandler(); และเพียงวางกรอบการแทรกวันที่-เวลาแต่ละรายการด้วยการเรียกวิธีการจัดรูปแบบที่เหมาะสม ตัวอย่างเช่น .

เกี่ยวกับโครงการนี้ ฉันยอมรับโดยสุจริตว่าฉันเป็นผู้เขียนห้องสมุดนี้ และฉันจะขอบคุณมากสำหรับคำวิจารณ์และความช่วยเหลือในการปรับปรุง แหล่งที่มามีการโพสต์เมื่อ

นี่เป็นบทความสั้น ๆ เกี่ยวกับวิธีการทำงานกับเขตเวลาเมื่อจัดเก็บค่าวันที่/เวลาในฐานข้อมูล ฐานข้อมูลหรือภาษาโปรแกรมที่คุณตัดสินใจใช้นั้นไม่สำคัญ เนื่องจากปรากฏการณ์ที่อธิบายไว้ในบทความนั้นเป็นสากล ฉันจะแสดงการกระทำของฉันโดยใช้ตัวอย่างการใช้ MySQL และ PHP ร่วมกัน ปัญหาที่เกี่ยวข้องกับเขตเวลาค่อนข้างเล็กน้อย หลายๆ คนมักลืมเรื่องการมีอยู่ของตน และบางคนคิดว่าสิ่งเหล่านั้นเป็นสิ่งที่ซับซ้อนเกินไป โดยทั่วไป เมื่อคุณตั้งค่าฐานข้อมูลหรือใช้บริการเว็บโฮสติ้ง โซนเวลาของคุณจะถูกกำหนดค่าตามค่าเริ่มต้น การตั้งค่าเริ่มต้นนั้นใช้ได้หากคุณใช้เซิร์ฟเวอร์เครื่องเดียว แต่จะเกิดอะไรขึ้นหากคุณตัดสินใจย้ายเซิร์ฟเวอร์นั้น

คำถามเดียวกันนี้สมเหตุสมผลหากคุณมีเซิร์ฟเวอร์หลายเครื่องในสถานที่ต่างกัน
แทนที่จะจัดเก็บโซนเวลาตามวันที่แต่ละวัน จะเป็นการดีกว่าหากยึดตามเวลามาตรฐานและเชื่อมโยงวันที่ทั้งหมดของคุณเข้ากับวันที่ดังกล่าว วิธีนี้ช่วยให้คุณเปลี่ยนเป็นเวลามาตรฐานก่อนที่จะเก็บค่าไว้ในฐานข้อมูล เลย เป็นความคิดที่ดี- เพียงใช้ UTC +00:00

UTC คืออะไร UTC ย่อมาจาก Coordinated Universal Time และเป็นตัวต่อจาก Greenwich Mean Time (GMT) ทั้งสองรูปแบบเกือบจะเหมือนกัน แต่ UTC ถือเป็นมาตรฐานที่ยอมรับ โดยทั่วไป UTC จะขึ้นอยู่กับ 40 โซนเวลาที่แตกต่างกัน เป็นเรื่องปกติที่จะใช้เวลา 00:00 ชั่วโมงเป็นจุดเริ่มต้นใน UTC ส่งผลให้มีโซนเวลาหลัก 12 โซน ทั้งเชิงบวกและเชิงลบ รวมถึงโซนเวลาเพิ่มเติมบางโซน เช่น ครึ่งชั่วโมง UTC +04:30 แนวคิดก็คือ หากคุณมีเขตเวลา UTC -05:00 คุณจะต้องลบ 5 ชั่วโมงจาก UTC เริ่มต้น +00:00 เพื่อให้บรรลุผลการแข่งขันที่ต้องการ นั่นคือ หากเป็นเวลา 14:00 น. (หรือ 14.00 น.) และเขตเวลาของคุณคือ UTC-05:00 (EST หรือเขตเวลาตะวันออก) UTC +00:00 จะเท่ากับ 19:00 น. (หรือ 19.00 น.) .
  • การแสดงโซนเวลาโลกแบบกราฟิก (วิกิพีเดีย)
  • รายการตัวย่อเขตเวลา (วิกิพีเดีย)
การจัดเก็บเวลาใน UTC +00:00 สิ่งแรกที่เราต้องทำคือตัดสินใจว่าจะใช้เขตเวลาใดในการจัดเก็บค่าทั้งหมดของเรา ฉันขอแนะนำอย่างยิ่งให้ใช้ UTC +00:00 เป็นฐาน ด้วยเหตุผลใดๆ ก็ตามนอกจากที่ง่ายต่อการจดจำ และ 0 แสดงถึงจุดอ้างอิงในอุดมคติ เนื่องจากเรารู้ว่าวันที่ทั้งหมดอยู่ใน UTC +00:00 การแสดงเวลาที่เหมาะสมสำหรับผู้ใช้แต่ละคนตามโซนเวลาส่วนตัวจึงกลายเป็นเรื่องง่ายยิ่งขึ้น เมื่อผู้ใช้เลือก (หรือเราตรวจพบอัตโนมัติ) โซนเวลา การแสดงเวลาที่เหมาะสมสำหรับผู้ใช้นั้นจะกลายเป็นเรื่องธรรมดา การตั้งค่าโซนเวลาเริ่มต้น สมมติว่าวันที่/เวลาทั้งหมดของเราถูกจัดเก็บใน UTC เราก็สามารถตั้งค่าโซนเวลาเริ่มต้นได้อย่างง่ายดาย โซนที่จะใช้แสดงแต่ละครั้ง นี่จะเลือกวันที่และเวลาสำหรับผู้ใช้เฉพาะโดยอัตโนมัติ ใน PHP สิ่งที่เราต้องทำคือตั้งค่าเขตเวลาดังนี้:
date_default_timezone_set("EST");
เราสามารถทำได้ในบล็อกการเริ่มต้นบางส่วนที่จุดเริ่มต้นของโค้ดของเรา และเสร็จแล้ว: วันที่ทั้งหมดจะแสดงอย่างเหมาะสมสำหรับโซนเวลาที่ผู้ใช้อยู่

ถ้าเราอยากได้ ควบคุมเต็มรูปแบบตามวันที่และเวลา เราสามารถสร้างฟังก์ชันดังนี้:
ฟังก์ชั่น get_date($date) ( date_default_timezone_set("EST"); $date = date("Y-m-d H:i:s", strtotime($date)); date_default_timezone_set("UTC"); return $date; )

การกำหนดค่า PHP สำหรับ UTC +00:00 แน่นอนว่าทุกอย่างจะไม่ง่ายนักหากเราไม่ได้กำหนดค่าระบบของเราสำหรับ UTC เป็นเขตเวลาเริ่มต้น ฉันแน่ใจว่าสิ่งนี้สามารถทำได้ในลักษณะเดียวกันในภาษาอื่นๆ แต่ PHP มีลักษณะดังนี้:
date.timezone = UTC
ตอนนี้เมื่อใดก็ตามที่เราใช้ฟังก์ชัน time() มันจะแจ้งเวลา UTC ให้เราโดยอัตโนมัติพร้อมออฟเซ็ตที่เหมาะสมตามเวลาเซิร์ฟเวอร์ของเรา หากเราต้องการตั้งค่าวันที่ในฐานข้อมูลเช่น MySQL เราจะดำเนินการดังนี้:
date("Ymd H:i:s", time());
หากเราไม่สามารถเข้าถึงเพื่อเปลี่ยนการกำหนดค่า PHP ได้ เราต้องตั้งเวลาด้วยตนเองเมื่อตั้งวันที่ เช่นนี้
date("Ymd H:i:s", time() - date("Z"));

การตั้งค่า MySQL เป็น UTC +00:00 การตั้งค่าวันที่โดยตรงตามที่เราทำข้างต้นสามารถใช้ได้หากเราไม่มีสิทธิ์เข้าถึงเพื่อเปลี่ยนพารามิเตอร์การกำหนดค่า MySQL อย่างไรก็ตาม หากเราต้องการใช้ TIMESTAMP ซึ่งโดยปกติจะเป็นการอัปเดตตัวเอง หรือใช้ฟังก์ชันวันที่ของ MySQL เช่น NOW() เราต้องกำหนดค่า MySQL ให้ใช้ UTC เป็นเขตเวลาเริ่มต้น
ใน MySQL สิ่งนี้ทำได้โดยการตั้งค่าออฟเซ็ต UTC ซึ่งสามารถทำได้ง่ายเหมือนกับใน PHP โดยทำการเปลี่ยนแปลงต่อไปนี้:

ค่าเริ่มต้นโซนเวลา = "+00:00"

การอัปเดตวันที่/เวลาที่มีอยู่ หากคุณเลือกที่จะกำหนดโซนเวลาให้เป็นมาตรฐานโดยใช้ UTC โดยที่โซนเวลาเริ่มต้นคือออฟเซ็ต UTC +00:00 เวลาปัจจุบันของคุณในฐานข้อมูลของคุณจะถูกใช้งานไม่ได้

โชคดีที่ MySQL มีคุณสมบัติที่มีประโยชน์ซึ่งช่วยให้เราสามารถอัปเดตโซนเวลาที่มีอยู่ได้อย่างง่ายดายบันทึก:

หากคุณมีการประทับเวลาใดๆ จะต้องอัปเดตก่อน
เราสามารถค้นหาฟิลด์วันที่และเวลาทั้งหมดในฐานข้อมูลของเราโดยใช้แบบสอบถามต่อไปนี้:
จากที่นี่ เราสามารถใช้แบบสอบถามต่อไปนี้เพื่ออัปเดตวันที่/เวลาในตารางของเรา:
อัปเดต `table_name` SET `timestamp`=CONVERT_TZ(`timestamp`, "-05:00", "+00:00");
โดยที่ -05:00 คือเขตเวลาปัจจุบันในรูปแบบที่จัดเก็บเวลา (เช่นในกรณีก่อนหน้านี้จะอ้างอิงถึงตะวันออก) โซนเวลา +00:00 ที่เราต้องการแปลงเป็น UTC ในกรณีนี้