ไม่จำเป็นต้องแปลงเป็นการประทับเวลาเพื่อทำการเปรียบเทียบเนื่องจากสตริงได้รับการตรวจสอบความถูกต้องเป็นวันที่ในรูปแบบบัญญัติ "YYYY-MM-DD"
การทดสอบนี้จะใช้ได้ผล:
( ( $date_from_user >= $start_date ) && ( $date_from_user <= $end_date ) )
ให้:
$start_date = '2009-06-17';
$end_date = '2009-09-05';
$date_from_user = '2009-08-28';
หมายเหตุ: การเปรียบเทียบสตริงเช่นนี้อนุญาตให้ใช้วันที่ "ไม่ถูกต้อง" เช่น (วันที่ 32 ธันวาคม) "2009-13-32" และสำหรับสตริงที่มีรูปแบบแปลก ๆ "2009/3/3" ดังนั้นการเปรียบเทียบสตริงจะไม่เทียบเท่ากับ การเปรียบเทียบวันที่หรือการประทับเวลา สิ่งนี้ใช้ได้เฉพาะในกรณีที่ค่าวันที่ในสตริงอยู่ในCONSISTENTและCANONICALรูปแบบ
แก้ไขเพื่อเพิ่มบันทึกที่นี่โดยมีรายละเอียดเกี่ยวกับสิ่งที่ชัดเจน
โดยCONSISTENTฉันหมายถึงตัวอย่างเช่นว่าสตริงที่กำลังเปรียบเทียบต้องอยู่ในรูปแบบที่เหมือนกัน: เดือนจะต้องมีอักขระสองตัวเสมอวันนั้นจะต้องมีอักขระสองตัวเสมอและอักขระตัวคั่นจะต้องเป็นเส้นประเสมอ เราไม่สามารถเปรียบเทียบ "สตริง" ที่ไม่ใช่ปีอักขระสี่ตัวเดือนสองอักขระวันอักขระสองตัวได้อย่างน่าเชื่อถือ ถ้าเรามีการผสมผสานของตัวละครตัวหนึ่งและสองตัวละครในเดือนสตริง, ตัวอย่างเช่นเราต้องการได้รับผลที่ไม่คาดคิดเมื่อเราเปรียบเทียบการ'2009-9-30'
'2009-10-11'
เรามนุษย์ปุถุชนดูที่ "9" ในฐานะที่เป็นน้อยกว่า "10" แต่การเปรียบเทียบสตริงจะเห็นเป็นมากกว่า'2009-9'
'2009-1'
เราไม่จำเป็นต้องมีอักขระคั่นกลาง เราสามารถเปรียบเทียบสตริงใน'YYYYMMDD'
รูปแบบ; หากมีอักขระคั่นจะต้องอยู่ตรงนั้นเสมอและเหมือนกันเสมอ
โดยCANONICALฉันหมายถึงรูปแบบที่จะทำให้เกิดสตริงที่จะเรียงตามลำดับวันที่ นั่นคือสตริงจะมีการแสดง "ปี" ก่อนจากนั้น "เดือน" ตามด้วย "วัน" เราไม่สามารถเปรียบเทียบสตริงใน'MM-DD-YYYY'
รูปแบบได้อย่างน่าเชื่อถือเพราะไม่ใช่รูปแบบบัญญัติ การเปรียบเทียบสตริงจะเปรียบเทียบMM
(เดือน) ก่อนที่จะเปรียบเทียบYYYY
(ปี) เนื่องจากการเปรียบเทียบสตริงทำงานจากซ้ายไปขวา) ประโยชน์อย่างมากของรูปแบบสตริง "YYYY-MM-DD" คือเป็นแบบบัญญัติ วันที่ที่แสดงในรูปแบบนี้สามารถเปรียบเทียบเป็นสตริงได้อย่างน่าเชื่อถือ
[ADDENDUM]
หากคุณใช้การแปลงการประทับเวลา php โปรดระวังข้อ จำกัด
ในบางแพลตฟอร์ม php ไม่สนับสนุนค่าการประทับเวลาก่อนปี 1970-01-01 และ / หรือใหม่กว่า 2038-01-19 (นั่นเป็นลักษณะของจำนวนเต็ม 32 บิตของ unix timestamp) รุ่นที่ใหม่กว่า pf php (5.3?)
เขตเวลาอาจเป็นปัญหาได้เช่นกันหากคุณไม่ระมัดระวังที่จะใช้เขตเวลาเดียวกันเมื่อแปลงจากสตริงเป็นการประทับเวลาและจากการประทับเวลากลับเป็นสตริง
HTH