PHP日期:如果有条件,则在PHP上进行语法调试

时间:2011-02-17 19:32:24

标签: php debugging syntax if-statement

在以下代码中,$ start是手动输入到datepicker的开始日期,$ end也是一个单独的密钥,通过datepicker输入。这些是与今天的日期('ymd')进行比较。

在这个插件的代码的早期,我们有这个代码(其中相同的参数返回true):

//Parse End Date
if($end):
    $end = explode('-', $end);
    $end = mktime($hour, $_POST['_date_minute'], 0, $end[0], $end[1], $end[2]);
        if ((date('ymd',$start) < date('ymd',$end)) && (date('ymd',$end) >= date('ymd'))) {
            $compare = date('ymd'); //Overwrite start date $compare
        }
        else {
            $compare = date('ymd', $start);         
        }
endif;

稍后在代码中,相同的参数在此处返回false:

function event_list_date($start_or_end, $format, $echo = true){
    global $post;

    // Check the end date, if it's greater than today and then start date is less than or equal to today, round it off so that it's today and doesn't look like the event is already past

    // Original Code
    //  if ((date('ymd',$start) < date('ymd',$end)) && (date('ymd',$end) >= time('ymd'))) {

    // Stackoverflow Proposed Change
    //  if ($start < $end && $end >= time('ymd')) {

    if ($start < $end && $end >= time('ymd')) {
        $start = date('ymd'); //Overwrite start date $compare
    }
    else {
        $start = get_post_meta($post->ID, '_date_start', true);;            
    }

    $end = get_post_meta($post->ID, '_date_end', true);

    if($start_or_end == 'start'):
        $date = date($format, $start);
        if($echo): echo $date; else: return $date; endif;
    elseif($start_or_end == 'end'):
        $date = date($format, $end);
        if($echo): echo $date; else: return $date; endif;
    endif;   
}

有人能告诉我为什么if语句对于$ start值等于昨天且$ end等于5天的事件返回false?

编辑:发布此代码的“缩小”背景

1 个答案:

答案 0 :(得分:5)

日期函数将这些更改为字符串。然后你使用数学比较运算符来比较字符串,这不符合你想要的方式。如果您想将日期与其他日期进行比较,您可能希望将它们转换为更容易比较的内容,例如数字。

strtotime将照顾到这一点!由于你将$ start传递给date()(需要一个数字参数),我假设$ start已经是一个数字时间表示。因此,要立即进行比较,请使用time();

strtotime docs

date docs