ฉันสงสัยว่าปัญหาเกี่ยวข้องกับความแตกต่างของstrtotime()
บางอย่าง
strtotime()
สามารถใช้สตริงใดก็ได้และแปลงเป็น Unix Timestamp date_default_timezone_get()
ปัญหาคือว่าเมื่อสตริงไม่ประกอบด้วยเขตอย่างชัดเจนก็จะใช้สิ่งที่ถูกกำหนดโดย ที่ควรตั้งค่าจากผู้ใช้ปัจจุบันแม้ว่า (มันถูกกำหนดโดยพร็อกซี่บัญชี) อย่างไรก็ตามสตริงที่คุณกำลังดึงออกมา$node->field_date->value
จะอยู่ใน UTC โดยปริยาย ในคำอื่น ๆ ฉันคิดว่าสตริงจะถูกแยกวิเคราะห์โดยstrtotime()
จะถูกตีความเช่นเดียวกับใน 'America / New_York' และไม่ใช่ 'UTC'
ข่าวดีก็คือคุณสามารถทำให้สถานการณ์ของคุณง่ายขึ้นมาก รายการฟิลด์สำหรับช่วงวันที่ประกอบด้วยสี่ส่วน
- 'value' คือวันที่เริ่มต้นเป็นสตริงใน UTC
- 'start_date' เป็นวัตถุ DrupalDateTime แทน 'value'
- 'end_value' คือวันที่สิ้นสุดเป็นสตริงใน UTC
- 'end_date' เป็นวัตถุ DrupalDateTime แทน 'end_value'
สำหรับเขตเวลาวันที่ธรรมดาพวกเขา
- 'value' คือวันที่เป็นสตริงใน UTC
- 'date' เป็นวัตถุ DrupalDateTime แทน 'value'
ดังนั้นคุณสามารถทำงานกับDrupalDateTime()
วัตถุได้โดยตรง นอกจากนี้date.formatter
บริการดังกล่าวควรดึงเขตเวลาที่เหมาะสมในการใช้งานโดยผู้ใช้ที่ดูหน้าเว็บเป็นค่าเริ่มต้น (นอกเหนือจากการใช้ภาษาที่ใช้งานของผู้ใช้)
ฉันสงสัยว่าสิ่งนี้จะได้ผล
$node = Node::load(2100);
$start_date = $node->field_date->start_date;
$formatted = \Drupal::service('date.formatter')->format(
$start_date->getTimestamp(), 'custom', 'Y-m-d H:i:s P'
);
หมายเหตุฉันได้เพิ่มตัวยึดรูปแบบ 'P' ไว้ที่นั่นเพื่อให้คุณสามารถดูว่าเขตเวลาใดที่ระบบคิดว่าใช้งานอยู่
ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าเขตเวลาที่เหมาะสมบน admin / config / region / settings และเขตเวลาผู้ใช้ของคุณเป็นสิ่งที่คุณคาดหวัง ตรวจสอบให้แน่ใจว่าคุณมีการตั้งค่าเขตเวลาที่เหมาะสมใน php.ini ของคุณ (เป็นการdate.timezone
ตั้งค่า) สิ่งแปลก ๆ เกิดขึ้นเมื่อไม่ได้ตั้งค่า (และด้านบนของหัวของฉันฉันจำไม่ได้ว่าถ้านั่นทำให้เกิดการเตือนในตัวติดตั้งหรือรายงานสถานะเมื่อไม่ได้ตั้งค่าฉันจำปัญหาได้ แต่ไม่ใช่ว่ามันจะได้รับ มุ่งมั่น).
date
คุณสมบัติในการเข้าถึง DrupalDateTime จากความอยากรู้คุณคิดออกยังไง? ฉันสามารถคิดออกได้ว่าฟิลด์ของฉันเป็นแบบนั้นDateTimeItem
แต่ภายในนั้นดูเหมือนจะไม่ชัดเจนว่ามีสมาชิกสาธารณะdate
(หรือvalue
) สำหรับชั้นเรียนนั้น