2014-04-28 19 views
0

我正在從目錄中提取文件名和修改日期。 我必須將日期格式化爲ymd h:i,以便我可以使用array_multisort按日期順序對數組進行排序。將日期字符串調整爲其他格式

我想然後從ymd h:i重新格式化日期到d/m/y h:i;所以140428 11:54會變成28/04/14 11:54。

我已經有一個for循環,通過每個數組位置基本上追加到一個變量,以便在網站上打印出來。

<?php 
$filelist = array(""); 
$datelist = array(""); 
$html = ""; 
$x = ""; 
$days = 250; 
$path = 'Directory...'; 
if ($handle = opendir($path)) { 
    while (false !== ($file = readdir ($handle))) { 
     if (($file !== ".") && ($file !== "..") && ($file !== "Failed") 
       && ($file !== "Complete")) { 
      if (filemtime($path.'/'.$file) > (time() - ($days * 24 * 60 * 60))) { 
       array_push($filelist, $file); 
       array_push($datelist, date("ymd h:i", filemtime($path.'/'.$file))); 
      } 
     } 
    } 
    closedir($handle); 
    array_multisort($datelist, SORT_DESC, $filelist); 
    $num = count ($filelist); 
    for ($x=0; $x<$num; $x++) { 
     $html .= '<tr><td><a href="file://directory/'.$filelist[$x].'">'.$filelist[$x] 
      .'</a><br></td><td>'.$datelist[$x].'</td></tr>'."\n\t\t\t\t\t\t\t\t\t\t\t\t"; 
    } 
} 
?> 
+0

你的意思是你知道如何生成'140428 11:54',但無法弄清楚如何讓'28/04/14 11:54 '?你甚至知道你的代碼是由哪一行負責'140428 11:54'? –

+0

那你爲什麼要用'date'呢? 'filemtime'返回一個時間戳,可以不經過轉換就排序。爲什麼在初始化數組時,地獄裏有一個空字符串? –

+0

我對此表示歉意......這是我寫的第一個php腳本。當我沒有用空字符串初始化時,httpd錯誤日誌被填充。另外從我的Java知識中填充一個空值的變量,可以確保它覆蓋內存分配,並且不會獲取現有值。 負責140428 11:54(示例)的代碼行是: array_push($ datelist,date(「ymd h:i」,filemtime($ path。'/'。$ file))); 由於我使用按字母排序的array_multisort,因此這種格式似乎是最簡單的解決方案。 sebcap26,你會如何編輯我的代碼? – syme89

回答

0

您可以創建一個輔助函數來分析您的自定義日期時間字符串是這樣的:

<?php 

// Helper Function 
function parseDate($datetime_str) 
{ 
    list($myDate, $myTime) = explode(' ', $datetime_str); 
    list($year, $month, $date) = str_split($myDate, 2); 
    return "$date/$month/$year $myTime"; 
} 

// Data Source 
$datetime_str = '140428 11:54'; 

// Usage 
var_dump(parseDate($datetime_str)); 

?> 

輸出:

enter image description here

0

我想然後重新格式化日期從ymd h:我到d/m/yh:我;所以140428 11:54會變成28/04/14 11:54。

使用DateTime這樣的操作

$date = DateTime::createFromFormat('ymd h:i', '140428 11:54'); 
echo $date->format("d/m/y h:i"); 
+0

我認爲我的PHP版本不幸的是DateTime函數,但輝煌的清潔代碼感謝您的幫助:) – syme89