สอบถามเกี่ยวกับการดึงข้อมูลตามวันที่ปัจจุบัน โดยแบ่งการแสดงผลเป็น 2 ช่วงครับ
ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา สอบถามเกี่ยวกับการดึงข้อมูลตามวันที่ปัจจุบัน โดยแบ่งการแสดงผลเป็น 2 ช่วงครับ
สอบถามเกี่ยวกับการดึงข้อมูลตามวันที่ปัจจุบัน โดยแบ่งการแสดงผลเป็น 2 ช่วงครับ
ช่วงที่ 1 วันที่ปัจจุบัน
2017-05-30 07:30 - 2017-05-30 19:00
ช่วงที่ 2 วันที่ปัจจุบัน
2017-05-30 19:30 - 2017-05-31 07:00
ต้องเขียนคิวรี่ยังไงครับ
โดยอ้างอิง วันเวลา ตามปัจจุบันครับ > Now
ผมติดในช่วงที่ 2ครับ หลังเที่ยงคืนมันเปลี่ยนวันใหม่ ต้องเขียนยังไงครับ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | if ( $Datadate >= "$Nowdate 07:30" and $Datadate <= "$Nowdate 19:29" ) { $Where = "production_time >= '$Nowdate 07:30' AND production_time <='$Nowdate 19:29'" ; $Showtext = "07:30 - 19:00" ; } else { $Where = "production_time >= '$Nowdate 19:30' AND production_time <= '$Nowdate 07:29'" ; $Showtext = "19:30 - 07:00" ; } $strSQLsum = "select production.production_time,production.production_date,sum(total40trip) as sum40trip,sum(total12trip) as sum12trip ,sum(total12trip1) as sum12trip1 ,sum(total16trip) as sum16trip,sum(total16trip1) as sum16trip1,sum(total25trip) as sum25trip,sum(total30trip) as sum30trip , count (production_time ) as numtrip,sum(toptrip) as sumtoptrip from production where $Where "; |

คำแนะนำ และการใช้งาน
สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก
- ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
ความคิดเห็นที่
1
การเปรียบเทียบวันที่ใน 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
แทนที่เราจะใช้
1 | <="2017-05-30 19:29" |
เราก็ใช้เป็น
1 | <"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" ; } |

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

ความคิดเห็นที่
3
<b>Parse error</b>: parse error in <b>C:xampphtdocsproductionmain.php</b> on line <b>1239</b><br />
มัน error แถว ฟังชั่น Time() เนี่ยครับ
มัน error แถว ฟังชั่น Time() เนี่ยครับ

ความคิดเห็นที่
4
ได้แล้วครับพี่นิค ขอบคุณมากครับ
เมื่อกี้ copy code ไป ดื้อ ๆ มันคงติดอักขระ ไรสักอย่าง
เลยนั่งพิมพ์เอง ครับ
ขอบคุณมากครับ

เมื่อกี้ copy code ไป ดื้อ ๆ มันคงติดอักขระ ไรสักอย่าง
เลยนั่งพิมพ์เอง ครับ
ขอบคุณมากครับ



ขอบคุณทุกการสนับสนุน
![]()