1

PHPを使用して変更日でファイルをソートしようとしています。

filemtime関数を使用してsortから、次のコードを使用して関数を使用しています。

<?php

$array2 = array();
$images = glob("*.*");
foreach($images as $image) {
echo "Last modified: ".date("F d Y H:i:s.",filemtime($image));
echo "<br>";

array_push($array2,date("F d Y H:i:s.",filemtime($image)));
}
//echo array2;
sort($array2);
echo "<br>";

foreach ($array2 as $ar)
{
    echo $ar;
    echo "<br>";

}
//$array2[$image] = date("F d Y H:i:s.",filemtime($image));

?>

出力は次のようになります

Last modified: June 21 2013 15:48:42.
Last modified: June 12 2013 14:43:10.
Last modified: April 09 2013 15:39:13.
Last modified: June 12 2013 14:00:14.
Last modified: June 21 2013 16:08:58.
Last modified: July 15 2013 12:44:28.
Last modified: July 15 2013 12:48:48.
Last modified: July 15 2013 14:42:19.
Last modified: July 15 2013 14:54:48.
Last modified: April 09 2013 15:39:13.
Last modified: June 21 2013 15:34:30.
Last modified: June 21 2013 15:56:32.

April 09 2013 15:39:13.
April 09 2013 15:39:13.
July 15 2013 12:44:28.
July 15 2013 12:48:48.
July 15 2013 14:42:19.
July 15 2013 14:54:48.
June 12 2013 14:00:14.
June 12 2013 14:43:10.
June 21 2013 15:34:30.
June 21 2013 15:48:42.
June 21 2013 15:56:32.
June 21 2013 16:08:58.

ここでは、7 月が 4 月と 6 月の間であることがわかります

誰でも私に問題を教えてもらえますか?

4

1 に答える 1

1

問題は、日付の人間が読める表現を並べ替えているため、明らかに 4 月が最初になります (A で始まります)。

あなたがする必要があるのは次のようなものです

foreach($images as $image) {
    array_push($array2, filemtime($image));
}

sort($array2);

// and now, AFTER sorting get the formatted dates 
foreach ($array2 as $ts)
{
    echo date("F d Y H:i:s.", $ts);
}

いくつかのヒント:

  1. ファイルの最終変更時刻を 1 行で取得できます。

    $array2 = array_map('filemtime', $images);
    
  2. dateシステムのタイムゾーンによって異なります。date_default_timezone_set何かを行う前に、適切に設定されていることを確認してください。

于 2013-07-15T12:05:16.233 に答える