【问题标题】:Check if today's date is passed the expiration date [closed]检查今天的日期是否已过期[关闭]
【发布时间】:2016-05-18 13:55:37
【问题描述】:

有人可以帮我解决这个问题吗:

<?php 
    include 'include/db_config.php';

    $result = $dbs->prepare("SELECT * FROM service_info WHERE id = :id");
    $result->bindParam(':id', $_SESSION['id']);
    $result->execute();
    for ($i=0;$i = 0; $row = $result->fetch(); $i++) {
        ?>

        <td><?php echo $row['datepicker']; ?></td>

        <?php



        $offset = strtotime("+1 day");
        $enddate = date("Y-m-d H:i:s", $offset);
        echo $enddate . "</br>";
        if ($enddate < $startdate) {
            echo "expired";
        } else {
            echo "active";
        }
    }
?>

我想要实现的是找出 $row['datepicker'] 中保存的日期值是否超过 2 天前。如果是超过 2 天前,我希望它回显 expired,否则我希望它显示 active

例如: $row['datepicker'] 可以包含日期:2016 年 5 月 18 日(基于用户输入 - 不是固定值)。这意味着它的到期日期是:2016 年 5 月 20 日。如果今天的日期大于或等于 2016 年 5 月 20 日,则应回显 expired。如果今天的日期是 2016 年 5 月 19 日,它应该回显 active,因为它还不是两天前。

【问题讨论】:

  • 这段代码没有任何意义,你的问题也不清楚。
  • 你想要什么??解释清楚!
  • $stardate 是从哪里来的?您可以比较时间戳(在通过日期之前),以便您可以使用 if($offset
  • 我想设定一个有效期。但我的代码似乎不起作用。我正在制作一个按摩网站,其中有一个预订,它每 2 天自动过期@JensonMJohn

标签: php


【解决方案1】:

基于your comments,您想使用$startdate 并增加两天时间。如果今天的日期已经过了那个时间,那么你想打印过期的,否则打印活动的。

$startdate = "16-May-2016";
$expire = strtotime($startdate. ' + 2 days');
$today = strtotime("today midnight");

if($today >= $expire){
    echo "expired";
} else {
    echo "active";
}

在这种情况下,它会回显expired,因为在撰写本文时,距离 5 月 16 日已经过去了两天。如果您将 $startdate 更改为 5 月 17 日,它将回显 active,因为那只是过去 1 天。

对于您的具体问题,您可能希望将 $startdate 更改为如下所示:

$startdate = $row['datepicker'];

只要$startdate 中指定的日期大于或等于过去 2 天,它将显示 expired,否则将显示活动状态。


我们在这里做什么?

这很简单。我们利用strtotime() 从您的$startdate 值中获取+2 days 的时间戳。然后我们在午夜得到今天的日期(因此实际时间戳相当于 2016 年 5 月 18 日 00:00:00)。

我们的最后一步是比较两个时间戳,看看今天的日期是否大于或等于到期日期。


注意:这假设您的$startdate 的格式与strtotime() 兼容。

【讨论】:

  • 所以我应该这样写我的代码? $startdate = $row['datepicker']; $expire = strtotime($startdate.' + 2 days'); $today = strtotime("今天午夜"); if($today >= $expire){ echo "过期"; } 其他 { 回声“活动”; }
  • 是的,我认为应该可以。
  • 它不起作用,先生。我收到此错误:未捕获的异常 'Exception' 带有消息 'DateTime::__construct() [datetime.--construct]: 无法解析时间字符串 (11 Maypm16 2017) 位置 6 (p):在数据库中找不到时区'
  • @Ginxx0009 您尝试传入的日期存在问题。作为您的示例,您说$row['datepicker'] 的值将是11-May-2016,它适用于我提供的代码。您正试图向它传递这样的字符串:11 Maypm16 2017,这与您所说的传递的不同。看起来您的 $row['datepicker'] 的值是问题所在。
  • 我使用了 varchar 而不是日期,对不起,我忘了说。会影响先生吗? @Henders
【解决方案2】:

在 php 5.2+ 中你可以使用这个

$today = date("Y-m-d H:i:s");  
$startdate = $row['datepicker'];   
$offset = strtotime("+1 day");
$enddate = date($startdate, $offset);    
$today_date = new DateTime($today);
$expiry_date = new DateTime($enddate);

if ($expiry_date < $today_date) { // your echo stuff }

【讨论】:

  • 什么是$startdate?它似乎没有被定义。
  • 我的代码的意思是 应该是开始日期,可能结束日期会在 2 天后自动过期。但我做不到>.
  • @Ginxx0009 您的 $startdate 是您从 datepicker 中选择日期的唯一位置。请注意如何将日期存储在数据库中。否则此代码将正常工作。
  • @AmitRay 那么我如何传递我的 datepicker 的值。我可以这样做吗? : $DateToday = 日期选择器?
  • 你可以这样做 $start_date = $_POST["datepicker"];因为您的日期格式为 2016 年 5 月 18 日。要保存到数据库中,请使用 strtotime $timestamp = strtotime($start_date);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
相关资源
最近更新 更多