如果今天在2个不同的日期之间,则在PHP中进行比较,然后打印一个值

时间:2013-12-25 16:49:58

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

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

$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));

为了稍后我可以使用该信息进行比较,如果今天是在$开始和结束之间,如果今天是在这些日期之间,那么我将打印一些东西。 所以这是我正在使用的总代码,但我有日期格式的问题...我做错了,因为页面只是花了很长时间加载页面,最后它没有加载...当我使用WHILE bucle时,问题就出现了,因为我试图在WHILE之前使用代码并且页面以正常方式加载。所以我不知道如果我使用错误的WHILE BUCLE或strtotime函数或date的格式......?

<?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;
    }
}
?>

请帮助!!!!欢迎任何消化!必须有一个解决方案...我在布局(While)(FOR)做错了,因为页面没有加载!!!

谢谢!!! :)

3 个答案:

答案 0 :(得分:2)

如果您直接比较strtotime()值,它会起作用。 strtotime()返回简单整数,>/</=类型比较将按预期工作。在您的代码中,您使用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()方法(如果您使用的是{{}格式化日期字符串1}} class)。

答案 1 :(得分:1)

此处不需要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
    }

答案 2 :(得分:0)

您还可以使用简单的PHP日期类进行比较。

例如:

$date = new simpleDate();
if($date->now()->compare($start)->isAfter() && $date->now()->compare($end)->isBeforeOrEqaul()) {
    //code here.
}

还有其他有用的方法。请check the tutorials page

相关问题