PHP日期比较不对

时间:2013-08-29 01:09:48

标签: php date sorting comparison

我正在修改Joomla / K2中的自定义功能,但它实际上只涉及PHP。这个功能不能通过任何模块或扩展来实现,所以我真的需要弄明白。

我正在输出K2文章并尝试按日期字段排序,这是K2中的“额外字段”。它作为日期字符串存储在数据库中。我的功能是对作品进行排序,因为它更改项目的顺序 - 但它不能正确地按顺序排列。

function cmp($a, $b){
    global $array;
    return strcmp($array[$a][1], $array[$b][1]);
}


  $limit = 3;
  $limitstart = 0;

  foreach($items as $key=>$item) {

            $extraval = NULL;

            foreach ($item->extra_fields as $extraField){
                if($extraField->value != ''){
                    if($extraField->name == "Start Date"){
                      $extraval = strtotime($extra_field->value);
                    }
                }
            }

            $extrasort[$key] = Array();
            $extrasort[$key][0] = $item;
            $extrasort[$key][1] = $extraval;

          }

          sort($extrasort, 'cmp');

          $rows = Array();
          $total = $limit + $limitstart;

          for($i=$limitstart; $i<$total; $i++) {
            if(!empty($extrasort[$i][0])) {
              $rows[] = $extrasort[$i][0];
            }
          }

目前的输出是:

1381525200
1380834000
1386795600

这显然不正确,(希望)。

任何建议或提示都会非常感激,我已经玩了好几个小时了,一般来说我不确定二维阵列。

由于

2 个答案:

答案 0 :(得分:0)

sort使用的回调函数提供了需要比较的两个值。没有必要去看全局数组。在这种情况下,你在$ extrasort中提供了两个元素,它们本身就是数组,所以你只需要查看你想要排序的元素。

你的功能应该(可能)是:

function cmp($a, $b){
 return strcmp($a[1], $b[1]);
}

答案 1 :(得分:0)

感谢您的帮助迈克。我的解决方案是将日期转换为ISO(YYYY-MM-DD)格式并使用以下函数排序:

function compareasc($v1, $v2) {
       if ($v1[1] == $v2[1]) return 0;
       return ($v1[1] < $v2[1])?-1:1;
}

usort($extrasort, 'compareasc');