ฉันจะจัดการโซนเวลาในเว็บแอปได้อย่างไร


107

ฉันต้องการความเข้าใจที่ดีขึ้นเกี่ยวกับเรื่องราวของผู้ใช้ต่อไปนี้:

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

ตามที่ฉันเห็นมีอย่างน้อยสองประเด็นที่นี่:

  1. ฉันจะบันทึกการประทับเวลาในฐานข้อมูลได้อย่างไร
  2. ฉันควรนำเสนอใน UI อย่างไร

เมื่อจอห์นค้นหาเหตุการณ์เขาจะรู้ว่าเหตุการณ์นั้นเกิดขึ้นในเวลา 9.00 น. แต่เขาควรป้อนอะไรในเว็บเบราว์เซอร์? เขาจะไม่พบอะไรเลยเมื่อเข้าสู่ "9:00" เป็นเวลาประทับเพราะนั่นอาจเป็นเวลาที่ซูริคหรือนิวยอร์ก (เนื่องจากยังไม่พบเหตุการณ์แอปจึงไม่มีทางรู้ว่าเกิดขึ้นที่ซิดนีย์ดังนั้น ไม่สามารถเลือกเขตเวลาที่ถูกต้องโดยอัตโนมัติ)

วิธีใดที่ดีในการขอการประทับเวลาจากผู้ใช้ซึ่งอาจรวมถึงเขตเวลาไว้ด้วย

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

อะไรคือตัวอย่างที่ดีในการแสดงการประทับเวลาที่อาจสร้างขึ้นในเขตเวลาอื่น

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


5
Stack Overflow แก้ปัญหานี้ได้โดยใส่ทุกอย่างใน UTC ไม่สะดวกเสมอไป แต่แน่นอนว่าไม่คลุมเครือไม่ยากที่จะนำไปใช้และใช้งานได้
Ry-

2
UTC เป็นสิ่งที่ดึงดูด แต่ OTOH ไม่จำเป็นต้องซิงโครไนซ์เหตุการณ์ในหลายเขตเวลา
Aaron Digulla

3
จะเกิดอะไรขึ้นถ้าประเทศใดประเทศหนึ่งที่เกี่ยวข้องออกกฎหมายเปลี่ยนแปลงเวลาท้องถิ่นหลังจากที่กำหนดจัดงาน แต่ก่อนที่เหตุการณ์จะเกิดขึ้น ระบบควรจัดการอย่างไร? en.wikipedia.org/wiki/…
Julius Musseau

1
คำถามเกี่ยวกับเขตเวลาคลาสสิกประเภทนี้ถูกตีตายมานานหลายทศวรรษทั่วอินเทอร์เน็ตและในการพิมพ์ฉันรู้สึกประหลาดใจที่ได้เห็นข้อมูลที่มีชีวิตชีวาและรางวัลมากมายสำหรับคำถามนี้!
BenSwayne

2
ของฉันเพิ่มความซับซ้อนเพิ่มเติมโดยชี้ให้เห็นสิ่งที่ชัดเจนกล่าวคือโลกตะวันตกส่วนใหญ่เปลี่ยนเขตเวลาปีละสองครั้ง ("เวลาออมแสง") และกฎที่ว่าเมื่อสิ่งนี้เกิดขึ้นนั้นไม่เหมือนกันทั่วโลกหรือไม่จำเป็นต้องเป็นเรื่องเล็กน้อย อัลกอริทึมพูด?
fr13d

คำตอบ:


100

ปัญหาในการจัดเก็บการประทับเวลานั้นง่ายมาก: จัดเก็บไว้ใน UTC

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

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

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


สรุปข้างต้น:

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

เราหมายถึงอะไรตาม "เขตเวลา" ดูเหมือนว่าใช้ไม่ชัดเจน ดูเหมือนข้อมูลอ้างอิง: en.wikipedia.org/wiki/Tz_database จากสิ่งที่ฉันบอกได้ว่า "เขตเวลา" คือ "พื้นที่ / สถานที่" เช่น "America / New_York" ดูเหมือนว่าจะเป็นทางภูมิศาสตร์ซึ่งดีมากเพราะเช่น America / Los_Angeles หมายถึงทั้ง PST และ PDT ขึ้นอยู่กับว่าโลกกำลังทำงานในเวลาออมแสง และหากเป็นเช่นนั้นคำถามคือเราจะอธิบายการเปลี่ยนแปลงรายปีใน UTC offset สำหรับโซนได้อย่างไร? นอกจากนี้เราเรียกการประเมินเหล่านั้นว่าอะไรเนื่องจากไม่ใช่ "โซน" ในทางภูมิศาสตร์
iJames

นี่คือคำตอบที่ยอดเยี่ยม มีแนวทางปฏิบัติที่ดีที่สุดในการจัดเก็บข้อมูลเขตเวลาหรือไม่? เช่นอันไหนดีกว่ากัน - "PST" หรือ "America / Pacific" ฉันจะแปลงการประทับเวลาใน UTC เป็นเขตเวลาของผู้ใช้ได้อย่างง่ายดายได้อย่างไร ขอขอบคุณแนวทางปฏิบัติที่ดีที่สุดในเรื่องนี้
Patthebug

27

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

สำหรับการจัดเก็บวันที่ UTC เป็นวิธีที่จะไป แปลงเป็น UTC และติดลงในฐานข้อมูล ในขณะที่ดึงข้อมูลเพียงแค่แปลงเวลาเป็นเขตเวลาที่ตั้งไว้สำหรับผู้ใช้

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

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

หากคุณมีข้อมูลเขตเวลาเว็บแอปทั้งหมดควรทำงานด้วยการตั้งค่าเขตเวลา ดังนั้นเมื่อผู้ใช้ค้นหาในเวลา 9:00 น. เขาจะค้นหาด้วยเขตเวลาซิดนีย์ ในทางกลับกันถ้าเขาสร้างกิจกรรมขณะนั่งอยู่ในนิวยอร์กเขาจะสร้างกิจกรรมที่มีเขตเวลาซิดนีย์ เราแก้ไขกรณีดังกล่าวด้วยการแสดงเขตเวลาเสมอในขณะที่แสดงวันที่

หวังว่าจะช่วยได้! :)


ฉันคิดว่าด้วยการเพิ่มเมนูแบบเลื่อนลงสำหรับเขตเวลาเมื่อค้นหาและสร้างกิจกรรมนี่คือวิธีที่จะไป (เมื่อฉันต้องการค้นหาเหตุการณ์ที่เพื่อนร่วมงานสร้างขึ้นในนิวยอร์กฉันไม่ต้องการทำคณิตศาสตร์ด้วยตัวเอง)
RasmusWL

นี่คือคำตอบที่ยอดเยี่ยม มีแนวทางปฏิบัติที่ดีที่สุดในการจัดเก็บข้อมูลเขตเวลาหรือไม่? เช่นอันไหนดีกว่ากัน - "PST" หรือ "America / Pacific" ฉันจะแปลงการประทับเวลาใน UTC เป็นเขตเวลาของผู้ใช้ได้อย่างง่ายดายได้อย่างไร ขอขอบคุณแนวทางปฏิบัติที่ดีที่สุดในเรื่องนี้
Patthebug

11
  1. UTC. ง่าย ๆ เข้าไว้.

  2. ใช้เขตเวลาที่เกี่ยวข้องกับผู้ใช้มากที่สุด

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

    ถ้ามันไม่ได้ถ่วงอินเตอร์เฟซของคุณมากเกินไปคุณสามารถแสดงวันที่ในเขตเวลาเหตุการณ์และเขตเวลาท้องถิ่นเช่น2012-06-13 09:00 EST (2012/06/12 19:00 EDT)

    ฉันขอยืนยันว่าการค้นหาเป็นปัญหาที่คล้ายกันโดยมีข้อแม้อย่างหนึ่ง: เราสามารถทนต่อผลบวกที่ผิดพลาดได้ (การได้รับผลลัพธ์ที่เราไม่คาดคิด) แต่เราไม่สามารถยืนหยัดในเชิงลบที่ผิดพลาดได้ (ไม่ได้รับผลลัพธ์ที่เราคาดหวัง)

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


7

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

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

ด้วยคุณสมบัติเหล่านี้มาดูกันว่าจะจัดการ
กับคำค้นหาของ John ที่มีเพียง "9.00" ได้อย่างไร: ด้วยคุณสมบัติที่กล่าวมาข้างต้นตอนนี้ฉันรู้แล้วว่า John อยู่ใน 2 เขตเวลาจนถึงวันที่ (หรือรับรายการเขตเวลาสำหรับช่วงเวลาที่กล่าวถึง) ดังนั้นฉันจะปกปิด 9.00 น. จากโซนเวลาซิดนีย์เป็น UTC เริ่มการค้นหา นอกจากนี้ยังแปลง 9.00 จากเขตเวลา NewYork เป็น UTC เริ่มการค้นหา ดังนั้นฉันจะแสดง 2 แถวให้จอห์นแสดงสิ่งที่เขาทำเวลา 9.00 น. ที่ซิดนีย์และเวลา 9.00 น. ในนิวยอร์ก เส้นนิวยอร์กจะว่างเปล่าในกรณีนี้ แต่ฉันคิดว่าควรแสดงต่อผู้ใช้เพียงเพื่อแจ้งให้เขาทราบว่าเราค้นหาเขตเวลานี้ด้วย

3. อะไรคือวิธีที่ดีในการขอการประทับเวลาจากผู้ใช้ซึ่งอาจรวมถึงเขตเวลาไว้ด้วย

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

4. วิธีแสดงผลหากทีมจากทั่วโลกต้องการหารือเกี่ยวกับเหตุการณ์:

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

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


2
+1 นี่เป็นแนวคิดที่น่าสนใจมากเพราะฉันรู้ว่าผู้ใช้เข้าร่วมกิจกรรมเวลา 9:00 น. ในซิดนีย์ดังนั้นเมื่อผู้ใช้คนเดียวกันค้นหาเวลา (โดยไม่มีเขตเวลาที่ชัดเจน) ฉันควรถือว่าเขาหมายถึง "ฉันอยู่ที่ไหน เวลานั้น "
Aaron Digulla

4

โอเคฉันมีแนวทางที่แตกต่างจากคนอื่น ๆ :

ประการแรกฉันคาดเดาบางสิ่งก่อนที่มือ

บุคคลที่แสดงรายการกิจกรรมมีสมาร์ทโฟน (หากเป็นเบราว์เซอร์ฉันไม่ต้องตั้งสมมติฐานเหล่านี้) ด้วย:

  1. จีพีเอส

  2. ความสามารถ HTML5

  3. ความสามารถของ Javascript

ฉันจะบันทึกการประทับเวลาในฐานข้อมูลได้อย่างไร?

วิธีแก้ไข:เห็นได้ชัดว่าUTCฉันได้วางขั้นตอนด้านล่าง:

ขั้นตอนที่ 1. ใช้Geolocationของผู้ใช้โดยใช้ Geolocation API

    window.onload = getMyLocation;

    function getMyLocation() {
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(displayLocation);
        } else {
            alert("Oops, no geolocation support");
        }
    }

    function displayLocation(position) {
        var latitude = position.coords.latitude;
        var longitude = position.coords.longitude;
        var div = document.getElementById("location");
        div.innerHTML = "You are at Latitude: " + latitude + ", Longitude: " + longitude;
    }

ขั้นตอนที่ 2 ให้ (Long, Lat) เป็นข้อโต้แย้งบางส่วนของ (Lat, Long) กับ API ของ TimeZone เช่นYahoo API (ใช้ Flag R เพื่อให้ Latitude แปลงเป็น Timezone) เพื่อรับเขตเวลาของผู้ใช้

=> เขตเวลาของผู้ใช้ถูกกำหนดโดยไม่มีการป้อนข้อมูลของผู้ใช้ (ฉันใช้สิ่งนี้เพราะคุณไม่สามารถสรุปได้ว่าผู้ใช้รู้เขตเวลาของสถานที่ที่เขาอาศัยอยู่ฉันรู้ว่าเขตเวลาของฉันหลังจากไม่กี่เดือนหรือบางอย่างในสถานที่นั้น: P โง่มาก! )

ตารางแต่ละเหตุการณ์มีTimezone, Eventและอื่น ๆ นอกจากนี้ยังสามารถได้CityName แล้วสร้างตารางฐานข้อมูลอื่นที่มีการจัดหมวดหมู่ขึ้นอยู่กับCityNames ดังนั้นที่นี่ผู้ใช้จะมีสองคอลัมน์

|---------------------------------------|
|_____NewYork________|______Sydney______|
|                    |                  |
|Event 1             |  Event 2         |
|____________________|__________________| 

สำหรับ UI

=> ใช้ Google Calendar API หรือ Calendar API บางส่วน

การอ่านที่เกี่ยวข้อง:

  1. กำหนดเขตเวลาจากละติจูด / ลองจิจูดโดยไม่ต้องใช้บริการเว็บเช่น Geonames.org

  2. ค้นหาเขตเวลาจากละติจูดลองจิจูด

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

หวังว่าจะช่วยได้!


4
เป็นเรื่องง่ายมากที่จะหาเขตเวลาของใครบางคนโดยไม่ต้องระบุตำแหน่งทางภูมิศาสตร์ new Date().getTimezoneOffset()ให้ในไม่กี่นาทีหลัง UTC
Ry-

@minitech นั่นเป็นเรื่องจริง แต่จะเกิดอะไรขึ้นถ้าเหตุการณ์เกิดขึ้นใน NewYork และที่ไหนสักแห่งทางใต้ซึ่งเป็นเขตเวลาเดียวกัน ฉันกำลังใช้ตำแหน่งทางภูมิศาสตร์เพื่อให้คุณสามารถระบุเมือง (แม้จะแม่นยำ), เขตเวลาในภาพเดียวและวางตารางฐานข้อมูลของฉันไว้ ฉันต้องการลดการป้อนข้อมูลของผู้ใช้โดยใช้API ของอุปกรณ์เพื่อเพิ่มประสิทธิภาพของแอป
uday

ดังนั้น? เวลาจะเท่ากันทั้งสองแห่งจึงไม่มีปัญหา -1
Ry-

@minitech คุณสามารถดูลิงค์นี้ว่าทำไมฉันถึงแนะนำให้ใช้api ของอุปกรณ์มากกว่าวิธีอื่น webdirections.org/sotmw2011
uday

2
โอเค แต่ปัญหาที่นี่ไม่ได้เกี่ยวกับการรับเมืองของผู้ใช้ เป็นเพียงการกำหนดเขตเวลาเท่านั้น การใช้ Geolocation API ที่ใช้ไม่ได้กับทุกเบราว์เซอร์ / คอมพิวเตอร์จากนั้นเปลี่ยนเส้นทางไปยังปฏิทิน API เป็นวิธีที่ไม่ดีในการรับเขตเวลาของผู้ใช้เมื่อมีอยู่ในโค้ดหนึ่งบรรทัด
Ry-

2

สำหรับกรณีนั้นฉันจะจัดเก็บทั้งเวลาท้องถิ่นและเวลา UTC UTC ค่อนข้างสำคัญและใช้สำหรับการซิงค์และการแปลงเวลาเป็นเขตเวลาปัจจุบัน Local ใช้สำหรับการค้นหาและข้อมูลเพิ่มเติมเช่น:

คุณมีการประชุม:

12:00 Monday (UTC)
9:00 Monday (Sydney, creation local time)
11:00 Monday (Zurich, local time)

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


2
  1. ฉันจะบันทึกการประทับเวลาในฐานข้อมูลได้อย่างไร

ในการสร้างกิจกรรมฉันจะจัดเก็บเวลา UTC และเขตเวลาท้องถิ่น (aka creation time zone) ฉันจะใช้สิ่งที่ฉันเก็บไว้เพื่อแปลงเวลา UTC เป็นเวลาท้องถิ่น (aka creation time) และเก็บไว้ข้างเวลา UTC และcreation time zone.

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

  1. ฉันควรนำเสนอใน UI อย่างไร

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

โดยรวมแล้วฉันจะแสดงเวลา UTC เวลาท้องถิ่นcreation timeและcreation time zone(เช่นเวลาท้องถิ่นและเขตเวลาของเหตุการณ์ที่สร้างขึ้น) โดยเรียงตามเวลา UTC เพื่อให้คุณสามารถดูได้ว่าเหตุการณ์ใดมาก่อนในกรณีที่สองต่างกัน กิจกรรมถูกกำหนดไว้สำหรับ 9:00 ในสองเขตเวลาที่แตกต่างกัน


1
+1 ฉันชอบแนวคิดที่จะแสดงกิจกรรมทั้งหมดในทุกเขตเวลาที่เวลาท้องถิ่นตรงกัน ฉันไม่พอใจกับ SQL ( BETWEENเงื่อนไข24x )
Aaron Digulla
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.