我有一个表格,其中包含软件模块的到期日期。它们存储为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);
答案 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列。这使工作变得更加容易,如果需要,您可以在列上使用索引。