【问题标题】:usort Date Assistance排序日期协助
【发布时间】:2012-07-20 16:57:46
【问题描述】:

我正在尝试按我的模板字段 ($fields[3]) 之一对列表进行排序,但该模板字段是一个带有日期的文本输入字段。问题是由于日期的格式,它不会正确排序,因为我猜它只是在比较数字。

我认为我需要在进行排序之前更改日期格式,但到目前为止还没有这样做。

我正在尝试像这样使用 usort 函数(字段 3 的日期格式为 dd/mm/yyyy),

if (!function_exists('do_sort')) {
    function do_sort($a, $b) {
        return $a->fields[3] > $b->fields[3];
    }}

$data = $params['data'];
usort($data, 'do_sort');
$smarty->assign('sorted', $data);

这会像以前一样对数据进行排序,因为我没有更改任何内容,而且顺序不正确。谁能帮我在排序前重新格式化日期?

非常感谢

克里斯

【问题讨论】:

    标签: php date usort


    【解决方案1】:

    设法做到了。如果其他人有兴趣,我使用了以下功能:

       function date_compare($a, $b)
        {
            $t1 = strtotime($a->fields[3]);
            $t2 = strtotime($b->fields[3]);
            return $t1 - $t2;
        }    
        $data = $params['data'];
        usort($data, 'date_compare');
        $smarty->assign('sorted', $data);
    

    【讨论】:

      【解决方案2】:

      先尝试将字符串转换为时间戳:

      function do_sort($a, $b) {
          $aval = strtotime($a);
          $bval = strtotime($b);
          if ($aval == $bval) {
              return 0;
          }
          return $aval < $bval ? -1 : 1;
      }
      

      【讨论】:

      • 快速提问:strtotime() 如何确定模式是dd/mm/yyyy 还是mm/dd/yyyy?我想会有一些日期 strtotime() 因为这个问题而不起作用。
      • 此处列出了可以理解的格式:us3.php.net/manual/en/datetime.formats.date.php
      • 如果你需要一些超出这些的东西,你可能不得不使用一些可以识别区域设置的东西,比如 Zend_Date。 (或者只是自己解析。)
      • 我明白了。 OP 注意:如果您打算使用strtotime(),请将日期格式从dd/mm/yyyy 更改为mm/dd/yyyydd-mm-yyyy
      猜你喜欢
      • 2011-07-22
      • 2016-07-24
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      相关资源
      最近更新 更多