重新计算存储为varchar类型的日期

时间:2014-10-27 11:56:27

标签: php mysql date

我有一个表格,其中包含软件模块的到期日期。它们存储为varchar(32)类型。数据库还在到期前一个月和到期前一天存储日期。当许可证即将到期时,客户端会在进入站点管理员时通过消息堆栈通知。

我想要的是能够编辑到期日期,以便可以将额外的月份甚至数年添加到客户端许可证中。问题是它还需要更新相对于新到期日的其他日期,否则他们将不会收到警告。

因此字段'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);

1 个答案:

答案 0 :(得分: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列。这使工作变得更加容易,如果需要,您可以在列上使用索引。