สอบถามเกี่ยวกับการดึงข้อมูลตามวันที่ปัจจุบัน โดยแบ่งการแสดงผลเป็น 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ครับ หลังเที่ยงคืนมันเปลี่ยนวันใหม่ ต้องเขียนยังไงครับ

 

              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 ";

 

 
 



ิbondsanti 31-05-2017 15:02:05

คำแนะนำ และการใช้งาน

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


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 1
การเปรียบเทียบวันที่ใน 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";
}
 


ninenik 31-05-2017
 ความคิดเห็นที่ 2

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

 

ขอบคุณมากครับ



ิbondsanti 31-05-2017 17:22
 ความคิดเห็นที่ 3
<b>Parse error</b>: parse error in <b>C:xampphtdocsproductionmain.php</b> on line <b>1239</b><br />

มัน error แถว ฟังชั่น Time() เนี่ยครับ


ิbondsanti 31-05-2017 17:38
 ความคิดเห็นที่ 4
ได้แล้วครับพี่นิค ขอบคุณมากครับ

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

ขอบคุณมากครับ


ิbondsanti 31-05-2017 19:05
1






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ