2014-10-27 20 views
0

我有一個包含軟件模塊到期日期的表。它們存儲爲類型varchar(32)。數據庫還會在到期前一個月和到期前一天存儲日期。當許可證即將到期時,當客戶進入站點管理員時,會通過消息堆棧通知客戶端。重新計算存儲爲類型varchar的日期

我想要的是能夠編輯到期日期,以便可以將額外的幾個月甚至幾年添加到客戶端許可證。問題是它還需要更新與新到期相關的其他日期,否則他們會在不應該時收到警告。

所以場「EDATE」包含存儲爲25-10-2015的日期,「wdate」包含25-09-2014和「fwdate」包含24-10-2015

你怎麼拿存儲的日期在數據庫中,並使其可用代碼如下所示,最初計算日期。

$todays_date = strtotime("now"); 
$delta_eleven = strtotime("+11 months"); 
$delta_364 = strtotime("+1 year -1 day"); 
$delta_year = strtotime("+1 year"); 

$idate = date("d-m-Y", $todays_date); 
$wdate= date("d-m-Y", $delta_eleven); 
$fwdate = date("d-m-Y", $delta_364); 
$edate = date("d-m-Y", $delta_year); 
+0

您可能知道,如果您將日期存儲在專爲此設計的字段類型中,應該會好很多?像'DATE'?而且,你知道嗎,你可以在幾分鐘內解決這個日期? – 2014-10-27 14:16:07

回答

1

在數據庫方面,您可以使用STR_TO_DATE()。第二個參數的解釋可以在here找到。在你的情況

SELECT STR_TO_DATE(your_date_column, '%d-%m-%Y') FROM your_table; 

加上或減去東西,你可以使用

SELECT STR_TO_DATE(your_date_column, '%d-%m-%Y') + INTERVAL 11 MONTH 
FROM your_table; 

SELECT STR_TO_DATE(your_date_column, '%d-%m-%Y') + INTERVAL 1 YEAR - INTERVAL 1 DAY 
FROM your_table; 

,如果您提供相應的數據類型(日期,日期時間加列這將是最好的或時間戳),使用str_to_date()函數更新新列,然後刪除包含日期的舊varchar列。這使得工作更容易,並且如果需要的話,您可以在列上使用索引。