2015-03-02 231 views
0

晚上好!在php中比较日期和月份

问题: 问题是在PHP中比较2个日期。 我只想比较日期和月份,不包括年份。 我希望代码首先检查月份,如果月份与当前月份相同或比当前月份少。如果这是真的,继续检查一天。如果当天等于或小于当前日期,请执行自定义代码。

我已经试过: 这里是我迄今为止 -

<?php 
$oldDate = "26/02/1815"; 
$latestDate = explode("/", $oldDate); 
$year = $latestDate[2]; 
$month = $latestDate[1]; 
$day = $latestDate[0]; 

$newDate = $month.'/'.$day.'/'.$year; 
$nowDate = date('m/d/Y'); 

$nownowDate = explode("/", $nowDate); 
$nowYear = $nownowDate[2]; 
$nowMonth = $nownowDate[0]; 
$nowDay = $nownowDate[1]; 

if ($nowMonth <= $month) { 
    if ($nowDay <= $day) { 
     echo<<<NEXTDATE 
     <li class="next"><?php echo link_to_next_item_show(); ?></li> //This is the custom code 
NEXTDATE; 
    } 
} 
?> 

我觉得有什么毛病我的IF语句。

+0

你是否得到任何形式的错误?我不能说我熟悉<<<语法,但是你的if语句看起来不错。 – 2015-03-02 16:44:22

+0

'我觉得我的IFs陈述有问题。'为什么?你需要描述实际的问题,而不仅仅是说你有一种模糊的感觉。 – developerwjk 2015-03-02 16:44:55

+0

@developerwjk问题是:在自定义代码中,有一段html + php代码需要在条件成立时进行回显,但我无法获得显示的自定义代码,就好像某些代码有问题IF声明。我无法弄清楚。 – 2015-03-02 17:14:05

回答

2

来源: Elegant way to get the count of months between two dates?

$timezone = new DateTimeZone('America/New_York'); 
$d1 = new DateTime("1815-02-26", $timezone); 
$d2 = new DateTime("2015-01-01", $timezone); 

var_dump($d1->diff($d2)->m); // int(4) 
var_dump($d1->diff($d2)->d); // int(4) 

if(($d1->diff($d2)->m) && ($d1->diff($d2)->d)){ 
    echo "run code here"; 
} 
0

你不能把<?php标签一个heredoc内。所以,而是采用了定界符你可以这样做:

echo '<li class="next">' . link_to_next_item_show() . '</li>'; 
+0

这很有用!如果只有我可以upvote它:)谢谢@developerwjk – 2015-03-03 10:29:24

0

感谢大家在尝试解决这个问题你最好的。也许我没有说清楚,这就是为什么你们中的一些人在挣扎,试图理解我在说什么。

我试着用开关来解决这个问题,所以这里是适合我的答案。

<?php 

$oldDate = metadata('item', array('Dublin Core', 'Date')); 
$latestDate = explode("/", $oldDate); 
$year = $latestDate[2]; 
$month = $latestDate[1]; 
$day = $latestDate[0]; 

$newDate = $month.'/'.$day.'/'.$year; 
$nowDate = date('m/d/Y'); 

$nownowDate = explode("/", $nowDate); 
$nowYear = $nownowDate[2]; 
$nowMonth = $nownowDate[0]; 
$nowDay = $nownowDate[1]; 

switch (true): 

    case ($month == $nowMonth): 
    if ($day < $nowDay) { 
     echo '<li class="next">' . link_to_next_item_show() . '</li>'; 
    } else { 
     echo " "; 
    } 
    break; 

    case ($month < $nowMonth): 
    echo '<li class="next">' . link_to_next_item_show() . '</li>'; 
    break; 

    case ($month > $nowMonth): 
    echo " "; 
    break; 
    default : 
    echo " "; 
    break; 
endswitch; 

?> 

感谢@developerwjk关于在heredoc中使用php标记的更正。现在我知道代码有什么问题了。我提供这个答案作为答案,以便其他人将从中受益,如果他们试图比较两个日期(仅比较日期和月份,而不考虑年份)。希望这对未来的其他人有用。