检查PHP中的日期不能用于不同的月份

时间:2014-11-28 07:34:56

标签: php html mysql

这里我正在检查当前日期到上一个日期的日期,当减去日期的结果是当前日期时它显示正确的消息。但是当减去的结果是前一个日期,如02-12-2014 - 4天它给出了28-11-2014。(02-12-2014> = 28-11-2014)的条件,它给出了错误。为什么它无法检查差异月份的差异。即使是日期的情况也是如此(04-12-2014> = 06-12-2014)。

<div class="box-content">
    <div class="maq_cont">
        <marquee direction="up" scrollamount="3" onMouseOut="this.setAttribute('scrollamount',3,0)" onMouseOver="this.setAttribute('scrollamount', 0, 0)" style="height:200px; margin-top:-10px;  margin-bottom:-10px;">
            <ul class="maq_li">
            <?php
                echo $work_date = "03-12-2014";
                echo "<br>";
                echo $day = "3";
                echo "<br>";                                        
                echo $show_date = date( "d-m-Y", strtotime( "$work_date -$day day" ));
                echo "<br>";
                echo $cur_date= date( "d-m-Y" );

                if ($cur_date >= $show_date) {
                    echo '<li>done</li>';
                } else {
                    echo '<li>not done</li>';
                }
            ?>
            </ul>
        </marquee>
    </div>
</div>

2 个答案:

答案 0 :(得分:2)

尝试 -

if(strtotime($cur_date)>=strtotime($show_date)){

这种情况正在发生,因为它们是strings

答案 1 :(得分:0)

您必须将年份放在日期字符串的开头,然后是月份,然后是日期。原因是:你没有比较日期,你比较字符串。它们将按字母顺序进行比较。

e.g。字符串日期'01.01.2015'按字母顺序小于'02.01.2013',但此格式('Ymd')按此特殊顺序执行操作:'20150101'按字母顺序排列,数字上大于{{ 1}}。

'20130102'

我更愿意与日期和令人敬畏的// this formatting will work $show_date = date('Ymd', strtotime("$work_date -$day day")); $cur_date = date('Ymd'); 对象进行比较。这样做:

DateTime

if (new DateTime('NOW') >= DateTime::createFromFormat('d-m-Y', $show_date)) { echo '<li>done</li>'; } else { echo '<li>not done</li>'; } 调用返回DateTime::createFromFormat()个对象。第一个参数DateTime的语法与您在$format中使用的格式字符串相同。第二个参数是要解析的格式化日期字符串。阅读更多:


获得此date()对象后,您可以像

那样做一些魔术
DateTime

要将日期输出为字符串,请使用$date = DateTime::createFromFormat('d-m-Y', $show_date); $date->modify('+1 days'); // one day later 函数:

format()

更多信息: