作为日期的文件名列表,按日期顺序排列


list of file names as dates, arrange in date order?

我的服务器上有一堆文件,文件名从'april2009'到'march2013',中间每个月一个文件(从现在起每个月将添加一个新文件)。

我试着用'filemtime'来排序,但这给了一个随机的顺序,因为它们似乎已经被修改了。

如何对文件名进行排序并按顺序排列,从最近的开始?

(使用php获取文件名,但可以使用jquery或混合使用)

谢谢

strtotime惊人的日期转换。

一旦你检索到你的文件列表,你可以做:

$date = strtotime('april2003');

可以得到:1049155200。这意味着:

1/4/2003 2:00:00

一旦你有了你的时间戳,你可以做任何你想做的排序。

这是一个POC:

$dirs = array();
if ($handle = opendir('/path/to/dir')) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != ".." && is_dir($entry)) {
            $dirs[strtotime(substr($entry, 0, -5))] = $entry;
        }
    }
    closedir($handle);
}
krsort($dirs);

委婉地说,在提出文件命名约定之前就应该考虑到这一点。正如在评论中指出的那样,唯一合理的命名约定是可排序的yyyy-mm或yyyy-mm-dd。

在这种情况下,你唯一的选择是:

  1. 加载文件名列表
  2. 在加载它们时,将名称转换为可排序的形式(因此您将转换april2003到200304)
  3. 当你加载它们时,将它们放在$img[$sortablefilename] = $真实文件名的数组中(例如$img['200304'] = 'april2003';)
  4. 使用ksort对结果数组进行排序
  5. 使用真实文件名读取排序数组以显示图像