2010-07-08 32 views
3

我有一個字符串字段(並且我不能改變這個因爲日期格式)在mysql數據庫中包含一個日期(例如:「01-03-2010」),我不想做一個函數來比較日期,如果今天的日期較新,8天,和虛假如果日期是低於或高於今天的日期做大返回true ...如何查看日期是否晚於8天?

例子:

01-03-2010 < (08-06-2010(Today) - 8days) - return true 
01-06-2010 < (08-06-2010(Today) - 8days) - return false 
31-05-2010 < (08-06-2010(Today) - 8days) - return true 

我知道我可以轉換字符串「01-03-2010」與時間戳與strtotime()功能在PHP,但我不知道如何從今天的時間戳刪除8天...:s

在此先感謝

回答

10

strtotime(time_str) < strtotime("-8 day")

+1

簡單快速+1 – CuSS 2010-07-08 10:39:01

2
+0

不會與MySQL的工作,因爲字段類型爲字符串字段而不是日期字段。 – CuSS 2010-07-08 10:35:09

+0

所以冷杉改變你的字符串日期與STR_TO_DATE()或考慮更改您的表fild類型日期 – 2010-07-08 10:39:07

+0

對不起,愚蠢了,使用以下表達式來查看兩個日期之間的差異是否超過8天(另請參閱mysql date_add()函數): select'2008-12-20'+ interval 8 day>'2008-12-29'; – 2010-07-08 11:05:39

3

除去在PHP8天你可以這樣做:

$date_less_8 = time() - (8*24*60*60); 

你可以在MySQL查詢檢查,如:

DayDate < DATE_SUB(CONCAT(CURDATE(), ' 00:00:00'), INTERVAL 8 DAY) 
1
$newDate = strtotime('31-05-2010'.' -8 days'); 
echo date('d-F-Y',$newDate); 

$eightdaysagoDate = strtotime('-8 days'); 
echo date('d-F-Y',$eightdaysagoDate); 
0

檢查的MySQL TO_DAYS

TO_DAYS(DATE) - TO_DAYS('2010-03-01')) < 8 
0

我傾向於在我的應用程序中使用這些定義:

//Time Settings 
if(!defined('SECOND')) define('SECOND', 1); 
if(!defined('MINUTE')) define('MINUTE', 60 * SECOND); 
if(!defined('HOUR'))  define('HOUR', 60 * MINUTE); 
if(!defined('DAY')) define('DAY',  24 * HOUR); 
if(!defined('WEEK'))  define('WEEK',  7 * DAY); 
if(!defined('MONTH'))  define('MONTH', 30 * DAY); 
if(!defined('YEAR'))  define('YEAR', 365 * DAY); 

然後

if($user_time < (time() - (DAY*8))) 
{ 
    //Whoopsie 
} 
0

隨着PHP> = 5.3 ,您可以使用新的閃亮DateTime對象(http://fr2.php.net/manual/fr/datetime.modify.php):

$date_from_mysql = new DateTime(/*put your date from mysql here, format yyyy-mm-dd*/); 

$date_today = new DateTime(); 

$date_8_days_ago = new DateTime() 
$date_8_days_ago->modify("-8 days"); 

if(($date_8_days_ago <= $date_from_mysql) && ($date_from_mysql <= $date_today)) { 
    /* your date from mysql is between today and 8 days ago */ 
} else if($date_from_mysql <= $date_8_days_ago) { 
    /* your date from mysql is before 8 days ago */ 
} else { 
    /* your date is in the future */ 
} 
1

這仍然可以在MySQL內部使用STR_TO_DATE(string, format)函數處理:

SELECT 
    *, STR_TO_DATE(dateColumn, '%d-%m-%y') < CURDATE() - INTERVAL 8 DAY as eightdaysold 
FROM myTable 
相關問題