【问题标题】:Comparing in PHP if today is between 2 different dates if so then print a value如果今天在 2 个不同的日期之间,则在 PHP 中进行比较,如果是,则打印一个值
【发布时间】:2013-12-25 16:49:57
【问题描述】:

我是 php 新手。 我从 2 个 drupal 字段中获取了 2 个日期,每个字段都以其自己的日期格式保存在数据库中,因此格式:

$old_format_starts -> 具有这种日期格式:date('Y-m-d H:i:s');

$old_format_ends -> 具有这种日期格式:date('jS F Y H:i:s');

所以我使用以下代码:

$old_format_starts = $entity->field_video_available_d[LANGUAGE_NONE][0]['value'];
$old_format_ends =  $entity->field_video_until[LANGUAGE_NONE][0]['value'];

之后,我将这些日期信息转换为以下日期格式:date('Y-m-d');像这样:

$starts =  date("Y-m-d", strtotime($old_format_starts));
$ends = date('Y-m-d', strtotime($old_format_ends));

为了稍后我可以使用该信息来比较今天是否在日期 $starts 和 &ends 之间,如果今天在这两个日期之间,那么我将打印一些东西。 所以这是我正在使用的总代码,但是我的日期格式有问题......我做错了,因为页面加载页面需要很长时间,最后它没有加载...... . 当我使用 WHILE bucle 时,问题就来了,因为我尝试只使用 WHILE 之前的代码并且页面以正常方式加载。所以我不知道我是否使用了错误的WHILE BUCLE 或strtotime 函数或dates 格式...?

<?php
$old_format_starts = $entity->field_video_available_d[LANGUAGE_NONE][0]['value'];
$old_format_ends =  $entity->field_video_until[LANGUAGE_NONE][0]['value'];

$starts =  date("Y-m-d", strtotime($old_format_starts));
$ends = date('Y-m-d', strtotime($old_format_ends));

$to= date("Y-m-d", strtotime($to));
$i = date("Y-m-d", strtotime($starts));
while ($i <= $ends) {
   if ($i==$to) {
       print date('Y-m-d', strtotime($i));
       break;
    }
    $i=date("Y-m-d", strtotime('+1 day', $i));
}

?>

我真的已经尝试了很多方法..但没有成功..这是相同的代码,但使用了 FOR bucle...并且也没有成功..

<?php
$old_format_starts = $entity->field_video_available_d[LANGUAGE_NONE][0]['value'];
$old_format_ends =  $entity->field_video_until[LANGUAGE_NONE][0]['value'];

$starts =  date("Y-m-d", strtotime($old_format_starts));
$ends = date('Y-m-d', strtotime($old_format_ends));

$to= date("Y-m-d");
for ($i = $starts; $i <= $ends; $i++) {
   if ($i==$to) {
       print $i;
       break;
    }
}
?>

请帮忙!!!!欢迎任何建议!!!必须有一个解决方案......我在 bucles (While)(FOR) 做错了什么,因为页面没有加载!

谢谢!!! :)

【问题讨论】:

  • bucle是什么意思?
  • 我不知道,但我认为他的意思是一个循环。

标签: php date drupal for-loop while-loop


【解决方案1】:

如果您直接比较 strtotime() 的值,它会起作用。 strtotime() 返回简单整数,&gt;/&lt;/= 类型比较将按预期工作。在您的代码中,您使用date() 将它们转换为字符串,以最低有效值优先顺序进行,因此您的比较不会按预期进行。

使用strtotime()比较日期

$start =  strtotime($old_format_starts);
$end = strtotime($old_format_ends);
$today = time();

if ($today > $start && $today < $end) {
    // code
}

使用DateTime 类比较日期:

$start =  new DateTime($old_format_starts);
$end = new DateTime($old_format_ends);

if ($today > $start && $today < $end) {
    // code
}

比较结束后,您可以使用date() 函数(如果您使用strtotime())或format() 方法(如果您使用DateTime 类)格式化日期字符串。

【讨论】:

    【解决方案2】:

    这里不需要while循环 我建议像这样使用 DateTime 原生类:

        $old_format_starts = $entity->field_video_available_d[LANGUAGE_NONE][0]['value'];
        $old_format_ends   = $entity->field_video_until[LANGUAGE_NONE][0]['value'];
    
        $starts = DateTime::createFromFormat('Y-m-d H:i:s', $old_format_starts);
        $ends   = DateTime::createFromFormat('jS F Y H:i:s', $old_format_ends);
        $today  = new DateTime() ;
    
        if(($today > $start) && ($today < $end)){
            //Do your thing
        }
    

    【讨论】:

    • 实际上我只尝试了您的代码,直到 $today = new Datetime();代码行以检查问题是否与(如果)有关,但不是!错误与日期时间有关。现在页面没有加载并带来下一个错误:Recoverable fatal error: Object of class DateTime could not be converted to string in eval()
    • 大家好!感谢你们俩!!问题解决了!!!我接受了 Amine 的建议,它奏效了。我只是以错误的方式打印结果。谢谢阿明!
    猜你喜欢
    • 1970-01-01
    • 2017-10-03
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2012-05-10
    • 2017-10-03
    相关资源
    最近更新 更多