|
|
|
ต้องการเปรียบเทียบวันที่ปัจจุบันกับฐานข้อมูล mysql |
|
|
|
|
|
|
|
โดยปกติ ของ mysql
date จะอยู่ในรูปแบบ YYYY-MM-DD
date time จะอยู่ในรูป YYYY-MM-DD HH:mm:ss
ดังนั้น ท่านเจ้าของกระทู้ควรจัดให้อยู่ใน format ที่ตรงกันกับ mysql
แล้วใช้ datediff
select datediff(DATE1,DATE2)
ซึ่งหาก DATE2 เป็นวันที่ย้อนหลังของ DATE1 จะทำให้ค่า เป็น +
และในทางตรงกันข้าม ค่าจะเป็น - ครับ
แต่ข้อเสียของการจัดเก็บข้อมูลแบบ DATE คือ
ขาดนัยสำคัญเรื่องเวลาไป สมมติ วันที่ 2011-01-27 เมื่อเที่ยงคืน 1 วินาที
จะมีค่าเท่ากับ 2011-01-27 เมื่อเวลา 23:59:59 วินาทีครับ
วิธีที่ได้ละเอียดที่สุด คือ timestamp ซึ่งเป็นวิธีที่ผมแนะนำ
เวลาจะแสดงผลค่อยจับมา format ด้วย date() อีกที
ยืดหยุ่นกว่านะครับ
แนะนำ my bug http://my.bugdevelopers.com
|
|
|
|
|
Date :
2011-01-27 09:21:36 |
By :
triplea |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
รบกวนอีกหน่อยครับคือผมยังมองภาพไม่ออก ถ้าต้องการเช็คว่าข้อมูลนั้นโพสมาแล้วเกิน 3 วันหรือเปล่า ต้องเขียนโค๊ชยังไงครับ คือมือใหม่นะครับยังไม่ค่อยเก่ง
ตรงที่เช็คว่าเกิน 3 วันหรือเปล่าเนี่ยครับ ต้องทำยังไง เอาวันที่ปัจจุบัน YYYY-MM-DD -3 ไปเลยหรือเปล่า หรือว่า DD -3 เฉพาะวัน ส่วนเดือน ปี ไม่เกี่ยว แล้วต้องเอามาเช็คกับฐานข้อมูลยังไง คือติดพวกคำสั่งต่างๆ นะครับ เขียนไม่ค่อยเป็น
ขอบคุณครับ
|
|
|
|
|
Date :
2011-01-27 11:59:30 |
By :
i5z |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$last_3_day = date('Y-m-d', strtotime(-3 day));
WHERE df < '{$last_3_day}' // เอาเฉพาะ ก่อน หน้า 3 วัน (ไม่ปัดเวลา)
|
|
|
|
|
Date :
2011-01-27 12:42:00 |
By :
pjgunner.com |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Quote:รบกวนอีกหน่อยครับคือผมยังมองภาพไม่ออก ถ้าต้องการเช็คว่าข้อมูลนั้นโพสมาแล้วเกิน 3 วันหรือเปล่า ต้องเขียนโค๊ชยังไงครับ คือมือใหม่นะครับยังไม่ค่อยเก่ง
ถ้า
D1 = 2011-01-27
D2 = 2011-01-20
select datediff(D1,D2) =====>> +7
นั่นคือ จากวันที่ D2 ถึง D1 ผ่านมาแล้ว 7 วัน
select datediff(D2,D1) =====>> -7
นั่นคือ จากวันที่ D1 ย้อนไป D2 ใช้เวลา 7 วัน
+ - เป็นแค่การอ้างสถานการณ์เฉย ๆ ครับ
Quote:ตรงที่เช็คว่าเกิน 3 วันหรือเปล่าเนี่ยครับ ต้องทำยังไง เอาวันที่ปัจจุบัน YYYY-MM-DD -3 ไปเลยหรือเปล่า หรือว่า DD -3 เฉพาะวัน ส่วนเดือน ปี ไม่เกี่ยว แล้วต้องเอามาเช็คกับฐานข้อมูลยังไง คือติดพวกคำสั่งต่างๆ นะครับ เขียนไม่ค่อยเป็น
ขอบคุณครับ
เอาวันที่มาลบกัน ไม่ควรทำอย่างยิ่งนะครับ ต้องเอามาทั้งยวง
ข้างบน เป็นการเขียน sql command
ถ้า php ก็ทำได้ง่าย ๆ เหมือนกัน หาก php 5.3+
Code (PHP)
$d1 = new DateTime(D1);
$d2 = new DateTime(D2);
$diff = $d1->diff($d2);
จะได้ผลลัพธ์เดียวกัน
อันนี้ compat กับต่ำกว่า 5.3
Code (PHP)
list($d1_y, $d1_m, $d1_d) = explode("-", D1);
list($d2_y, $d2_m, $d2_d) = explode("-", D2);
$d1 = mktime(0,0,0,$d1_m, $d1_d, $d1_y);
$d2 = mktime(0,0,0,$d2_m, $d2_d, $d2_y);
$diff = ($d2 - $d1) /(60*60*24);
อยากได้ + - ก็ สลับ d1 d2 เอาครับ
ถ้าชอบ php แนะนำที่ http://my.bugdevelopers.com
|
|
|
|
|
Date :
2011-01-27 12:54:53 |
By :
triplea |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Date :
2011-01-27 20:43:05 |
By :
hwungnee |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|