【问题标题】:PHP Date comparison not rightPHP日期比较不正确
【发布时间】:2013-08-29 01:09:47
【问题描述】:

我正在修改 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

显然(希望)这是不正确的。

任何建议或提示将不胜感激,我已经玩了几个小时了,总的来说我不确定 2D 数组。

谢谢

【问题讨论】:

    标签: php date sorting comparison


    【解决方案1】:

    sort 使用的回调函数提供了需要比较的两个值。无需查看全局数组。在这种情况下,$extrasort 中为您提供了两个元素,它们本身就是数组,因此您只需要查看要排序的元素即可。

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

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

    【讨论】:

      【解决方案2】:

      感谢迈克的帮助。我的解决方案是将日期转换为 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');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-30
        • 2019-03-06
        • 1970-01-01
        • 1970-01-01
        • 2018-09-25
        • 2016-02-24
        • 1970-01-01
        相关资源
        最近更新 更多