如何比较php数据库中的日期和今天的日期

时间:2017-10-17 17:02:13

标签: php mysql database

我创建了一个mysql表,如下所示。

我想使用if else语句将表中的日期与当前日期进行比较,并在前一天,后一天和同一日期向用户发送通知

例如,我们说今天的日期是18/10,Milk的失效日期是20/10,所以我想在19日,20日和21日发送通知。

所以,如果你可以帮我提供比较代码和发送通知(例如电子邮件)的代码,这些代码应该在if语句下我会非常感激:)。

我的问题可能看似简单,但我是php的新手。我没有太多关于它的信息。

这是我正在尝试的PHP代码

<?php


$first= new Carbon;

//$second= here I want the date to be collected from date column in the database

//X= The name of the item that will be collected from database (Item_Name) column


if ($second=eq($first+1))

    {echo"X is going to expire tomorrow"}

// instade of dispaying the above sentence, i want it to be sent as email


if ($first=eq($second))

    {echo"X is going to expire today!!"}


if ($first>eq($second))

    {echo"X has EXPIRED already"}

?>

我的表:

ID Item_Name Expiry_Date
 1 Milk      2017-10-20 
 2 Chicken   2017-10-22 
 3 Meat      2017-10-25

1 个答案:

答案 0 :(得分:1)

您可以使用DATE_ADD函数来确定间隔。

SELECT
   col1,
   col2,
   ...
FROM
   table
WHERE
   `date_column` BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 1 DAY);

你提到了PHP,我想澄清这是MySQL,我假设你有一个cron工作或者类似的设置来运行PHP脚本。

更新: 根据您更新的问题,您有两个主要选择,要么在数据库中进行处理,要么在PHP中进行处理。决定取决于您计划如何使用它,但可以双向完成。

- MySQL -

SELECT 
    ID,
    Item_Name,
    Expiry_Date,
    CASE 
        WHEN `Expiry_Date` < CURDATE() THEN CONCAT(`Item_Name`,' has EXPIRED already.')
        WHEN `Expiry_Date` = CURDATE() THEN CONCAT(`Item_Name`,' will expire today.')
        WHEN `Expiry_Date` BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 1 DAY) THEN CONCAT(`Item_Name`,' will expire tomorrow.')
        WHEN `Expiry_Date` > DATE_ADD(CURDATE(), INTERVAL 1 DAY) THEN CONCAT(`Item_Name`,' will expire after tomorrow.')
        ELSE 'Error processing expiration date.'
   END AS `Expiration_Message`
FROM
    table;

哪会产生 ID Item_Name Expiry_Date Expiration_Message  1牛奶2017-10-20牛奶将在明天到期。  2鸡肉2017-10-22鸡肉将在明天到期。  3肉2017-10-25肉类将在明天到期。

你也可以在PHP中进行字符串解析和日期添加,你似乎开始了。在发送电子邮件方面,PHP具有mail功能,How to send an email using PHP?可能会为您提供一些指导。现在,我假设您希望按计划运行,因此我会调查Execute PHP script in cron job

希望这有助于进一步澄清。