PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum


การใช้งานรูปแบบข้อความวันที่และเวลา กับฟังก์ชั่น strtotime() ใน php

05 June 2017 By
strtotime() เปรียบเทียบวันที่ วันที่และเวลา date()


เนื้อหานี้จะเป็นแนวทางการใช้งานรูปแบบวันที่และเวลาที่เป็นข้อความ เพื่อประยุกต์ใช้งานเกี่ยวกับ
วันที่และเวลาที่ต้องการ ตัวอย่างเช่น วันอังคารหน้าวันที่เท่าไหร่ เสาร์ที่สองของเดือนมกราคมคือวันที่เท่าไหร่
เหล่านี้เป็นต้น 
    โดยแนะนำว่าเนื้อหาในตอนนี้ เป็นทางเลือกสำหรับจัดการเกี่ยวกับวันที่และเวลาที่ซับซ้อน เลือกนำไปใช้
ถ้าเห็นว่ามีประโยชน์ โดยไม่ต้องจำสัญลักษณ์ทั้งหมดก็ได้ แต่ใหัรู้ว่ามีวิธีเหล่านี้อยู่ ซึ่งถ้าหากต้องการใช้งาน
ก็สามารถกลับมาดูเนื้อหาในบทความนี้เป็นแนวทางได้ ซึ่งเท่าที่ดูแล้ว บางรูปแบบคำสั่งอาจจะไม่จำเป็น
บางคำสั่งก็น่าสนใจ ลองอ่านรายละเอียดกันดู
 
ดูต้นฉบับอ้างอิงได้ที่ http://php.net/manual/en/datetime.formats.relative.php
 
ก่อนอื่นมาดูตารางสัญลักษณ์ต่างๆ ที่เราจะใช้ในการนำไปจัดรูปแบบข้อความวันที่ ไม่ว่าจะเป็น ชื่อวัน
ชื่อวันแบบย่อ เครื่องหมาย +/- เป็นต้น
สัญลักษณ์ที่ใช้งานรูปแบบข้อความวันที่ใน php แสดงในตารางได้ดังนี้
 
สัญลักษณ์ที่ใช้งาน
คำอธิบาย รูปแบบ
ชื่อวัน ได้ทั้งแบบเต็ม
และ แบบย่อ
'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday'
| 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat'
ข้อความแสดงวันปกติ ไม่ใช่
เสาร์ อาทิตย์
'weekday' | 'weekdays'
ตัวเลข อาจมีค่า + หรือ
- ด้านหน้า แล้วแต่กรณี
[+-]?[0-9]+
ข้อคามแสดงลำดับที่ 'first' | 'second' | 'third' | 'fourth' | 'fifth' | 'sixth' | 'seventh' | 'eighth' | 'ninth' | 'tenth'
| 'eleventh' | 'twelfth' | 'next' | 'last' | 'previous' | 'this'
ข้อความแสดงความสัมพันธ์
เช่น ถัดไป ก่อนหน้า วันนี้
'next' | 'last' | 'previous' | 'this'
ช่องว่าง กรณีมีการเชื่อมข้อความ [ \t]+
หน่วยเวลา (('sec' | 'second' | 'min' | 'minute' | 'hour' | 'day' | 'fortnight' | 'forthnight'
| 'month' | 'year') 's'?) | 'weeks' | หรือ ข้อความแสดงวันปกติ ( 'weekday' | 'weekdays' )
 

ประยุกต์การใช้งานคำอธิบายวันที่และเวลากับฟังก์ชั่นคำสั่ง strtotime()

 
รูปแบบข้อความ
"yesterday"
ใช้แสดงวันที่และเวลาของวันเมื่อวาน
ตัวอย่างการใช้งาน
<?php 
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("yesterday"))."<br>"; // 2017-06-01 00:00:00
// กรณีต้องการกำหนดเวลาไปด้วยก็สามารถทำได้ดังนี้
echo date("Y-m-d H:i:s",strtotime("yesterday 15:00"))."<br>"; // 2017-06-01 15:00:00
?>
 
 
รูปแบบข้อความ
"tomorrow"
ใช้แสดงวันที่และเวลาของวันพรุ่งนี้
ตัวอย่างการใช้งาน
<?php 
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("tomorrow"))."<br>"; // 2017-06-03 00:00:00
// กรณีต้องการกำหนดเวลาไปด้วยก็สามารถทำได้ดังนี้
echo date("Y-m-d H:i:s",strtotime("tomorrow 15:00"))."<br>"; // 2017-06-03 15:00:00
?>
 
 
รูปแบบข้อความ
"midnight" กับ "today" กับ "now"
ใช้แสดงวันที่และเวลาของวันปัจจุบัน
ตัวอย่างการใช้งาน
<?php 
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("now"))."<br>"; // 2017-06-02 04:18:28
// now ใช้แสดงวันที่และเวลาปัจจุบัน ต่างจาก midnight และ today ที่เซ็ตเวลาเป็น 00:00:00
echo date("Y-m-d H:i:s",strtotime("midnight"))."<br>"; // 2017-06-02 00:00:00
echo date("Y-m-d H:i:s",strtotime("today"))."<br>"; // 2017-06-02 00:00:00

// กรณี today สามารถทำการกำหนดเวลาไปด้วยได้ดังนี้
echo date("Y-m-d H:i:s",strtotime("today 12:11"))."<br>"; // 2017-06-02 12:11:00
?>
 
 
รูปแบบข้อความ
"noon"
ใช้แสดงเวลาเที่ยงตรง หรือ 12:00:00 ของวันนั้นๆ
ตัวอย่างการใช้งาน
<?php 
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("noon"))."<br>"; // 2017-06-02 12:00:00
// กรณีต้องการกำหนดวันที่ไปด้วยก็สามารถทำได้ดังนี้
echo date("Y-m-d H:i:s",strtotime("2017-06-03 noon"))."<br>"; // 2017-06-03 12:00:00
// สามารถใช้รวมกับรูปแบบข้อความวันที่อื่นๆ เช่น "yesterday noon" 
echo date("Y-m-d H:i:s",strtotime("yesterday noon"))."<br>"; // 2017-06-01 12:00:00
echo date("Y-m-d H:i:s",strtotime("tomorrow noon"))."<br>"; // 2017-06-03 12:00:00
?>
 
 
รูปแบบข้อความ
"ใช้ชื่อวัน" ตามสัญลักษณ์รูปแบบวันที่ตามตารางด้านบน
ใช้แสดงวันที่ของวันที่กำหนด โดยนับไปข้างหน้า เช่น สมมติ วันนี้วันศุกร์ "Friday" 
ถ้าเรากำหนดชื่อวันเป็น "Monday" ก็จะหมายถึง วันจันทร์ที่จะถึง ไม่ใช่วันจันทร์ที่ผ่านมา
และถ้ากำหนดเป็นชื่อวันปัจจุบัน ก็จะหมายถึงวันที่ ของวันนั้นๆ เช่น กำหนดชื่อวันเป็น "Friday"
ก็จะหมายถึงวันศุกร์วันนี้ ไม่ใช้วันศุกร์หน้า เป็นต้น
ตัวอย่างการใช้งาน
<?php 
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("Monday"))."<br>"; // 2017-06-05 00:00:00
echo date("Y-m-d H:i:s",strtotime("Mon 15:10"))."<br>"; // 2017-06-05 15:10:00
echo date("Y-m-d H:i:s",strtotime("Fri 15:10"))."<br>"; // 2017-06-02 15:10:00
?>
 
 
รูปแบบข้อความ
ข้อความสัมพันธ์วันที่ เว้นวรรค ตามด้วย "week"
ใช้แสดงของวันที่และเวลาให้สัมพันธ์กับข้อความโดยอ้างอิงกับสัปดาห์ เช่น
หาวันที่ของวันจันทร์สัปดาห์หน้า 
ตัวอย่างการใช้งาน
<?php 
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("Monday next week"))."<br>";  // 2017-06-05 00:00:00
echo date("Y-m-d H:i:s",strtotime("Saturday next week"))."<br>"; // 2017-06-10 00:00:00
// กรณีกำหนดเวลาสามารถ กำหนดได้เป็น
echo date("Y-m-d H:i:s",strtotime("Saturday next week 13:20"))."<br>"; // 2017-06-10 13:20:00
echo date("Y-m-d H:i:s",strtotime("Saturday this week 13:20"))."<br>"; // 2017-06-03 13:20:00
?>
 
 
รูปแบบข้อความ
ข้อความเลขลำดับที่ เว้นวรรค ตามด้วยหน่วยเวลา
ใช้แสดงของวันที่และเวลาที่สัมพันธ์กับข้อความ นับจากปัจจุบัน 
ตัวอย่างการใช้งาน
<?php 
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("first day"))."<br>";  // 2017-06-03 16:36:41
echo date("Y-m-d H:i:s",strtotime("second month"))."<br>"; // 2017-08-02 16:36:41
// กรณีกำหนดเวลาสามารถ กำหนดได้เป็น
echo date("Y-m-d H:i:s",strtotime("first day 11:10"))."<br>";  // 2017-06-03 11:10:00
?>
 
 
รูปแบบข้อความ
+/- ตัวเลขจำนวน เว้นวรรค ตามด้วยหน่วยเวลา หรือ "week"
ใช้แสดงของวันที่และเวลาที่สัมพันธ์กับค่าตัวเลขที่นำมาบวกเพิ่ม หรือลดลง นับจากปัจจุบัน 
ตัวอย่างการใช้งาน
<?php 
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("1 day"))."<br>"; // 2017-06-03 16:43:47
echo date("Y-m-d H:i:s",strtotime("+1 day"))."<br>";// 2017-06-03 16:43:47
echo date("Y-m-d H:i:s",strtotime("-1 day"))."<br>";// 2017-06-01 16:43:47
// ย้อนหลังนับเฉพาะวันธรรมดา ด้วย weekdays (ไม่นับเสาร์ อาทิตย์)
echo date("Y-m-d H:i:s",strtotime("-2 weekdays"))."<br>"; // 2017-05-31 00:00:00
// นับไปอีก 1 สัปดาห์คือวันที่อะไร
echo date("Y-m-d H:i:s",strtotime("+1 weeks"))."<br>"; // 2017-06-09 16:43:47
?>
 
 
รูปแบบข้อความ
"ago"
ใช้แสดงของวันที่และเวลาที่ผ่านมา โดยสัมพันธ์กับรายการวันที่และเวลาที่เกี่ยวข้อง
ตัวอย่างการใช้งาน
<?php 
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("2 days ago"))."<br>"; // 2017-05-31 16:43:47
// จะคล้ายกับ  "-2 days"
// ตัวอย่างเพิ่มเติม 
// "8 days ago 14:00", "2 months 5 days ago", "2 months ago 5 days", "2 days ago"
?>
 
 
รูปแบบข้อความ
"back of" เว้นวรรค ตามด้วยชั่วโมงที่กำหนด
ใช้แสดงวันที่และเวลาในอีก 15 นาที่ ต่อมา ของชั่วโมงที่กำหนด 
"front of" เว้นวรรค ตามด้วยชั่วโมงที่กำหนด
ใช้แสดงวันที่และเวลาก่อนชั่วโมงที่กำหนด 15 นาที่ 
ตัวอย่างการใช้งาน
<?php 
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("back of 7pm"))."<br>"; // 2017-06-02 19:15:00
// 7pm คือ 19 นาฬิกา ดังนั้น 15 นาทีต่อมาของ 19:00 คือ 19:15
echo date("Y-m-d H:i:s",strtotime("back of 15"))."<br>"; // 2017-06-02 15:15:00

echo date("Y-m-d H:i:s",strtotime("front of 5am"))."<br>"; // 2017-06-02 04:45:00
// 5am คือ 5 นาฬิกา ดังนั้น 15 นาทีก่อนเวลา 05:00 คือ 04:45
echo date("Y-m-d H:i:s",strtotime("front of 23"))."<br>"; // 2017-06-02 22:45:00
?>
 
 
รูปแบบข้อความ
"first day of" เว้นวรรค ตามด้วยชื่อเดือน ปี(ถ้ามี) หรือ ตามด้วย ข้อความที่สัมพันธ์กันเดือน
ใช้แสดงวันที่แรกของเดือนที่เรากำหนด ปกติก็จะได้วันที่ 1 แต่จะเป็นเวลาที่ 00:00:00
ถ้าเป็นการระบุเดือน หรือปี และเวลาเป็นเวลาปัจจุบัน ณ ขณะนั้น ถ้าระบุกับข้อความที่สัมพันธ์กับเดือน
"last day of" เว้นวรรค ตามด้วยชื่อเดือน ปี(ถ้ามี) หรือ ตามด้วย ข้อความที่สัมพันธ์กันเดือน
ใช้แสดงวันที่สุดท้ายของเดือนที่เรากำหนด ปกติจะเป็นค่าตามจำนวนวันของเดือนนั้นๆ
แต่จะเป็นเวลาที่ 00:00:00 ถ้าเป็นการระบุเดือน หรือปี 
และเวลาเป็นเวลาปัจจุบัน ณ ขณะนั้น ถ้าระบุกับข้อความที่สัมพันธ์กับเดือน
ตัวอย่างการใช้งาน
<?php 
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("first day of June 2017"))."<br>"; // 2017-06-01 00:00:00
echo date("Y-m-d H:i:s",strtotime("first day of next month"))."<br>"; // 2017-07-01 16:43:47

echo date("Y-m-d H:i:s",strtotime("last day of June 2017"))."<br>"; // 2017-06-30 00:00:00
echo date("Y-m-d H:i:s",strtotime("last day of next month"))."<br>"; // 2017-07-31 16:43:47
?>
 
 
รูปแบบข้อความ
ข้อความแสดงลำดับที่ เว้นวรรค ตามด้วยชื่อวัน เว้นวรรค ตามด้วย "of" ตามด้วยชื่อเดือน ปี(ถ้ามี) 
หรือ ตามด้วย ข้อความที่สัมพันธ์กันเดือน 
ใช้คำนวณหาวันที่และเวลาของวัน ในสัปดาห์ที่กำหนดของเดือนนั้น หรือเดือนที่ระบุ ตามความสัมพันธ์
โดยเวลาจะเป็นเวลาที่ 00:00:00
"last" เว้นวรรค ตามด้วยชื่อวัน เว้นวรรค ตามด้วย "of" ตามด้วยชื่อเดือน ปี(ถ้ามี) 
หรือ ตามด้วย ข้อความที่สัมพันธ์กันเดือน 
ใช้คำนวณหาวันที่และเวลาของวัน ในสัปดาห์สุดท้ายของเดือนนั้น หรือเดือนที่ระบุ ตามความสัมพันธ์
โดยเวลาจะเป็นเวลาที่ 00:00:00
ตัวอย่างการใช้งาน
<?php 
// สมมติวันนี้เป็นวันที่ 2017-06-02
echo date("Y-m-d H:i:s",strtotime("first sat of June 2017"))."<br>"; // 2017-06-03 00:00:00
echo date("Y-m-d H:i:s",strtotime("first sat of next month"))."<br>"; // 2017-07-01 00:00:00

echo date("Y-m-d H:i:s",strtotime("last sat of June 2017"))."<br>"; // 2017-06-24 00:00:00
echo date("Y-m-d H:i:s",strtotime("last sat of next month"))."<br>"; // 2017-07-29 00:00:00
?>
 
ทั้งหมดคือรูปแบบข้อความเกี่ยวกับวันที่ และการใช้งาน รวมถึงการประยุกต์ใช้งานร่วมกับ strtotime() และ
date() โดยคำสั่ง
strtotime() จะใช้แปลงข้อความเกี่ยวกับวันที่เวลา ให้อยู่ในรูปแบบเวลา timestamp ซึ่งเป็น number 
ที่เราสามารถนำไปใช้ในการเปรียบเทียบเวลา ได้
date() เป็นคำสั่งในการจัดรูปแบบการแสดงวันที่และเวลาให้อยู่ในรูปแบบที่เราต้องการ โดยรูปแบบมาตรฐาน
ที่เราคุ้น จะอยู่ในรูปแบบ 0000-00-00 00:00:00 ดังนั้นเวลาเราใช้งานวันที่ใน ฐานข้อมูล ควรกำหนด type 
ของฟิลด์ที่เก็บวันที่และเวลา ให้อยู่ในรูปแบบ date หรือ datetime จะทำให้สะดวกกว่าเก็บในรูปแบบ varchar

 

ขอนำคำตอบในกระทู้คำถาม มาเสริมในบทความนี้

เป็นการตอบเกี่ยวกับการเทียบช่วงเวลา โดยใช้ strtotime()
ข้อมูลจากคำตอบที่ http://www.ninenik.com/forum_view_2460_1.html#comment_5740

การเปรียบเทียบวันที่ใน php น่าจะต้องใช้ค่าวันที่ที่อยู่ในรูปแบบตัวเลข หรือที่เรียกว่า timestamp
ค่าวันที่และเวลาปัจจุบัน ได้จากฟังก์ชั่น time()
ค่าวันที่และเวลาจาก ข้อความวันที่ ได้จากใช้งานฟังก์ชั่น strtotime() หรือ mktime()
 
<?php
$date1="2017-05-31";
$date2="2017-05-31 15:00";
$date3="2017-05-31 15:00:01";
echo strtotime($date1)."<br>";
echo strtotime($date2)."<br>";
echo strtotime($date3)."<br>";
?>
 
สมมติเราต้องการหาว่า วันที่หรือเวลาที่ส่งมา มากกว่าหรือน้อยกว่าวันที่ปัจจุบัน
ก็จะได้เป็น
 
if(strtotime($date1)<time()){
     echo "Yes";   
}
 
กรณีเปรียบเทียบกับช่วงเวลา 2017-05-30 07:30 - 2017-05-30 19:00
เช่น เวลาในขณะนี้ อยู่ในช่วงเวลาที่กำหนดหรือไม่
 
 
$date_start1="2017-05-30 07:30";
$date_end1="2017-05-30 19:00";

if(time()>=strtotime($date_start1) && time()<=strtotime($date_end1)){
    echo "Yes";
}
 
หรือสมมติช่วงเวลาสิ้นสุดอย่าง $date_end1 มีค่าเพิ่มขึ้นในสัดส่วนคงที่ เราก็สามารถใช้วิธีการบวกค่า
แล้วใช้ฟังก์ัช่น strtotime() แปลงค่าอีกทีก็ได้ เช่น
 
$date_start1="2017-05-30 07:30";
$date_end1=date("Y-m-d H:i",strtotime($date_start1." +11 hour +30 minute"));
// $date_end1 เราจะได้มีค่าเท่ากับ 2017-05-30 19:00

if(time()>=strtotime($date_start1) && time()<=strtotime($date_end1)){
    echo "Yes";
}
 
แนวทางข้างต้น ใช้ได้กับกรณีเป็นเงื่อนไขข้ามวัน อย่างตัวอย่างช่วงที่ 2 
2017-05-30 19:30 - 2017-05-31 07:00
 
$date_start2="2017-05-30 19:30";
$date_end2=date("Y-m-d H:i",strtotime($date_start2." +11 hour +30 minute"));
// $date_end2 เราจะได้มีค่าเท่ากับ 2017-05-31 07:00
echo $date_end2."<br>";

if(time()>=strtotime($date_start2) && time()<=strtotime($date_end2)){
    echo "Yes";
}
 
 
เวลาการเทียบเงื่อนไข ควรใช้ค่าตัวแปรที่คงที่ไม่ควรเปลี่ยนแปลงค่า ให้ใช้วิธีการกำหนดที่เครื่องหมายการเปรียบแทียบแทน
เช่น สมมติ ช่วงที่ 1 เวลา 2017-05-30 07:30 - 2017-05-30 19:30
แต่เราไม่ต้องการข้อมูลที่มีค่าเท่ากับ 2017-05-30 19:30 
แทนที่เราจะใช้
 
<="2017-05-30 19:29"
 
เราก็ใช้เป็น 
 
<"2017-05-30 19:30"
 
จะเห็นว่าเราแค่เปลี่ยนเครื่องหมายการเปรียบเทียบ โดยไม่ต้องไปเปลี่ยนค่าตัวแปรวันที่ ซึ่งอาจจะสับสนได้
 
 
นี่ตือตัวอย่างของการเปรียบเทียบเวลาสองช่วง คือ
 
2017-05-30 07:30 - 2017-05-30 19:30
และ
2017-05-30 19:30 - 2017-05-31 07:30
 
$date_start1="2017-05-30 07:30";
$date_end1=date("Y-m-d H:i",strtotime($date_start1." +12 hour"));
echo $date_end1."<br>";
$date_start2="2017-05-30 19:30";
$date_end2=date("Y-m-d H:i",strtotime($date_start2." +12 hour"));
echo $date_end2."<br>";

if(time()>=strtotime($date_start1) && time()<strtotime($date_end1)){
    echo "Yes";
}
if(time()>=strtotime($date_start2) && time()<strtotime($date_end2)){
    echo "Yes";
}
 
 
ส่วนเงื่อนไขการใช้งานในคำสั่ง sql สามารถนำค่าตัวแปร มาใช้งานได้เลย เช่น
 
$date_start1="2017-05-30 07:30";
$date_end1=date("Y-m-d H:i",strtotime($date_start1." +12 hour"));
echo $date_end1."<br>";
$date_start2="2017-05-30 19:30";
$date_end2=date("Y-m-d H:i",strtotime($date_start2." +12 hour"));
echo $date_end2."<br>";

if(time()>=strtotime($date_start1) && time()<strtotime($date_end1)){
    $Where="production_time >= '$date_start1' AND production_time <'$date_end1'";
    echo "Yes";
}
if(time()>=strtotime($date_start2) && time()<strtotime($date_end2)){
    $Where="production_time >= '$date_start2' AND production_time <'$date_end2'";
    echo "Yes";
}
 

 


   เพิ่มเติมเนื้อหา ครั้งที่ 1 วันที่ 04-06-2017


รูปแบบการเทียบช่วงเวลา 2 ช่วงเวลา ตามกระทู้คำถาม หากเรากำหนดวันที่เริ่มต้น
แบบตายตัว ค่าของวันที่ก็จะทำงานถูกต้อง แต่กรณีเราใช้วันที่ ณ ปัจจุบันในขณะนั้น
ด้วยคำสั่ง date("Y-m-d") การกำหนดช่วงข้ามวันจะเกิดข้อผิดพลาด ดังนั้น เราต้องปรับโค้ดเล็กน้อย
 
แต่ก่อนอื่นจะขออธิบายให้ภาพแบบฟิกค่าวันที่กับแบบใช้ค่าวันที่ ณ ปัจจุบันขณะนั้น
 

กรณ๊ฟิกค่าวันที่ตามตัวอย่าง 

$date_start1="2017-05-30 07:30";
$date_end1=date("Y-m-d H:i",strtotime($date_start1." +12 hour"));
echo $date_end1."<br>";
$date_start2="2017-05-30 19:30";
$date_end2=date("Y-m-d H:i",strtotime($date_start2." +12 hour"));
echo $date_end2."<br>";
 
เราจะได้ ช่วงเวลาที่ 1 คือค่า $date_start1 กับ $date_end1
เป็น 2017-05-30 07:30 กับ 2017-05-30 19:30 ซึ่งยังไม่ข้ามวัน เป็นค่าที่ถูกต้อง
และช่วงที่ 2 คือค่า $date_start2 กับ $date_end2
เป็น 2017-05-30 19:30 กับ 2017-05-31 07:30 ซึ่งมีการข้ามวัน และเป็นค่าวันที่ที่ถูกต้อง
 

กรณีใช้ค่าวันที่ ณ ปัจจุบัน 

เช่น
$nowDate=date("Y-m-d");

$date_start1="$nowDate 07:30";
$date_end1=date("Y-m-d H:i",strtotime($date_start1." +12 hour"));
echo $date_end1."<br>";
$date_start2="$nowDate 19:30";
$date_end2=date("Y-m-d H:i",strtotime($date_start2." +12 hour"));
echo $date_end2."<br>";
เราจะได้ ช่วงเวลาที่ 1 คือค่า $date_start1 กับ $date_end1
เป็น 2017-05-30 07:30 กับ 2017-05-30 19:30 ซึ่งยังไม่ข้ามวัน เป็นค่าที่ถูกต้อง
แต่ถ้าเวลาขณะนั้นเป็นเวลาหลังเที่ยงคืนซึ่ง ข้ามวัน ค่าต่างๆ จะขยับเปลี่ยนแปลง
เป็น 2017-05-31 07:30 กับ 2017-05-31 19:30 พอข้ามวัน แล้วกลายเป็นค่าที่ไม่ถูกต้อง
 
และช่วงที่ 2 คือค่า $date_start2 กับ $date_end2
เป็น 2017-05-30 19:30 กับ 2017-05-31 07:30 ซึ่งถ้ายังไม่มีการข้ามวัน จะเป็นค่าวันที่ที่ถูกต้อง
แต่ถ้าเวลาขณะนั้นเป็นเวลาหลังเที่ยงคืนซึ่ง ข้ามวัน ค่าต่างๆ จะขยับเปลี่ยนแปลง
เป็น 2017-05-31 19:30 กับ 2017-06-01 07:30 พอข้ามวัน แล้วกลายเป็นค่าที่ไม่ถูกต้อง
 
ดังนั้นกรณีเราใช้วันที่ ณ ปัจจุบัน เราต้องกำหนดเงื่อนไขเพื่อเช็คหลังเที่ยงคืน ไปจนถึงเวลาสิ้นสุด
ของช่วงที่สอง ต้องกำหนดให้วันที่เริ่มต้นเป็นวันที่ผ่านมา ซึ่งจะได้ค่าคล้ายๆ กับการฟิกค่า
โดยทำโดยการแทรกเงื่อนไขเข้าไป ได้ดังนี้
 
$nowDate=date("Y-m-d");
// ถ้าข้ามวันและอยู่ในช่วงก่อนถึงสิ้นสุดช่วงที่สอง ให้ปรับเป็นค่าวันที่เมื่อวาน
if(time()>=strtotime("00:00:00") && time()<strtotime("07:30:00")){
    $nowDate=date("Y-m-d",strtotime("last day"));
}
$date_start1="$nowDate 07:30";
$date_end1=date("Y-m-d H:i",strtotime($date_start1." +12 hour"));
echo $date_end1."<br>";
$date_start2="$nowDate 19:30";
$date_end2=date("Y-m-d H:i",strtotime($date_start2." +12 hour"));
echo $date_end2."<br>";

if(time()>=strtotime($date_start1) && time()<strtotime($date_end1)){
    $Where="production_time >= '$date_start1' AND production_time <'$date_end1'";
    echo "Yes";
}
if(time()>=strtotime($date_start2) && time()<strtotime($date_end2)){
    $Where="production_time >= '$date_start2' AND production_time <'$date_end2'";
    echo "Yes";
}

 








เนื้อหาที่เกี่ยวข้อง



Tags:: strtotime() วันที่และเวลา date() เปรียบเทียบวันที่






อย่าลืมกด Like กด Share เป็นกำลังใจ ในการสร้างบทความใหม่ๆ น่ะครับ


URL สำหรับอ้างอิง