วันพุธที่ 31 มกราคม พ.ศ. 2561

แปลงวันที่ไทย

PHP
ลด-เพิ่มวัน 1 วัน (+-)
$mydt1 =  date("Y-m-d", strtotime("-1 days"));
ลด-เพิ่มเดือน 1 เดือน (+-)
$mydt1 =  date("Y-m-d", strtotime("-1 month"))
ลด-เพิ่มปี1 ปี(+-)
$mydt1 =  date("Y-m-d", strtotime("-1 year"))

from DB
   $mydt1 =$r_date;

function DateThai($strDate)
{
$strYear = date("Y",strtotime($strDate))+543;
$strMonth= date("n",strtotime($strDate));
$strDay= date("j",strtotime($strDate));
$strMonthCut = Array("","ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค.");
$strMonthThai=$strMonthCut[$strMonth];
return "$strDay $strMonthThai $strYear";
}

$strDate = $mydt1;

นำไปใช้
    $mydt = DateThai($strDate);



การใช้งานรูปแบบข้อความวันที่และเวลา กับฟังก์ชั่น strtotime() ใน php
05 June 2017 By Ninenik Narkdee
date() เปรียบเทียบวันที่ วันที่และเวลา strtotime()
คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ date() เปรียบเทียบวันที่ วันที่และเวลา strtotime()


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

ดูต้นฉบับอ้างอิงได้ที่ 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"
ใช้แสดงวันที่และเวลาของวันเมื่อวาน
ตัวอย่างการใช้งาน
1
2
3
4
5
6
<?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"
ใช้แสดงวันที่และเวลาของวันพรุ่งนี้
ตัวอย่างการใช้งาน
1
2
3
4
5
6
<?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"
ใช้แสดงวันที่และเวลาของวันปัจจุบัน
ตัวอย่างการใช้งาน
1
2
3
4
5
6
7
8
9
10
<?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 ของวันนั้นๆ
ตัวอย่างการใช้งาน
1
2
3
4
5
6
7
8
9
<?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"
ก็จะหมายถึงวันศุกร์วันนี้ ไม่ใช้วันศุกร์หน้า เป็นต้น
ตัวอย่างการใช้งาน
1
2
3
4
5
6
<?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"
ใช้แสดงของวันที่และเวลาให้สัมพันธ์กับข้อความโดยอ้างอิงกับสัปดาห์ เช่น
หาวันที่ของวันจันทร์สัปดาห์หน้า
ตัวอย่างการใช้งาน
1
2
3
4
5
6
7
8
<?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
?>


รูปแบบข้อความ
ข้อความเลขลำดับที่ เว้นวรรค ตามด้วยหน่วยเวลา
ใช้แสดงของวันที่และเวลาที่สัมพันธ์กับข้อความ นับจากปัจจุบัน
ตัวอย่างการใช้งาน
1
2
3
4
5
6
7
<?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"
ใช้แสดงของวันที่และเวลาที่สัมพันธ์กับค่าตัวเลขที่นำมาบวกเพิ่ม หรือลดลง นับจากปัจจุบัน
ตัวอย่างการใช้งาน
1
2
3
4
5
6
7
8
9
10
<?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"
ใช้แสดงของวันที่และเวลาที่ผ่านมา โดยสัมพันธ์กับรายการวันที่และเวลาที่เกี่ยวข้อง
ตัวอย่างการใช้งาน
1
2
3
4
5
6
7
<?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 นาที่
ตัวอย่างการใช้งาน
1
2
3
4
5
6
7
8
9
10
<?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 ถ้าเป็นการระบุเดือน หรือปี
และเวลาเป็นเวลาปัจจุบัน ณ ขณะนั้น ถ้าระบุกับข้อความที่สัมพันธ์กับเดือน
ตัวอย่างการใช้งาน
1
2
3
4
5
6
7
8
<?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
ตัวอย่างการใช้งาน
1
2
3
4
5
6
7
8
<?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()

1
2
3
4
5
6
7
8
<?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>";
?>

สมมติเราต้องการหาว่า วันที่หรือเวลาที่ส่งมา มากกว่าหรือน้อยกว่าวันที่ปัจจุบัน
ก็จะได้เป็น

1
2
3
if(strtotime($date1)<time()){
     echo "Yes"; 
}

กรณีเปรียบเทียบกับช่วงเวลา 2017-05-30 07:30 - 2017-05-30 19:00
เช่น เวลาในขณะนี้ อยู่ในช่วงเวลาที่กำหนดหรือไม่


1
2
3
4
5
6
$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() แปลงค่าอีกทีก็ได้ เช่น

1
2
3
4
5
6
7
$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

1
2
3
4
5
6
7
8
$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

1
2
3
4
5
6
7
8
9
10
11
12
13
$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 สามารถนำค่าตัวแปร มาใช้งานได้เลย เช่น

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$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") การกำหนดช่วงข้ามวันจะเกิดข้อผิดพลาด ดังนั้น เราต้องปรับโค้ดเล็กน้อย

แต่ก่อนอื่นจะขออธิบายให้ภาพแบบฟิกค่าวันที่กับแบบใช้ค่าวันที่ ณ ปัจจุบันขณะนั้น

กรณ๊ฟิกค่าวันที่ตามตัวอย่าง
1
2
3
4
5
6
$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 ซึ่งมีการข้ามวัน และเป็นค่าวันที่ที่ถูกต้อง

กรณีใช้ค่าวันที่ ณ ปัจจุบัน
เช่น
1
2
3
4
5
6
7
8
$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 พอข้ามวัน แล้วกลายเป็นค่าที่ไม่ถูกต้อง

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$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";
}