2012-07-04 47 views
4

我有一個由php例程date_parse返回的格式的日期數組。我需要將此日期數組轉換回日期字符串。如何將從date_parse返回的日期數組轉換回日期字符串

我正在尋找一個函數,它執行了與date_parse例程相反的功能。這是一個函數,它將接受日期數組作爲參數,並將返回一個日期字符串。

http://php.net/manual/en/function.date-parse.php

日期陣列我有時只值「年」,「月」,和「日」。其他時間它將具有「年」,「月」,「日」,「小時」,「分鐘」和「秒」的值。如果缺少小時,分鐘和秒值,我會期望該例程會爲該字符串的小時,分​​鍾和秒部分返回一個包含00:00:00的日期字符串。

我花了一些時間搜索,但到目前爲止還沒有找到與date_parse相反的函數。

回答

4

我正在尋找同一個問題的答案,但找不到它。我發現了一些例子the PHP documentation使用date()mktime()以及與此想出了...

$date_array = date_parse($date_string); 

// returns original date string assuming the format was Y-m-d H:i:s 
$date_string = date('Y-m-d H:i:s', mktime($date_array['hour'], $date_array['minute'], $date_array['second'], $date_array['month'], $date_array['day'], $date_array['year'])); 

我測試了這一點,該字符串將包含你想,如果小時,分鐘和秒都不會傳遞到mktime()的零。

0

那麼,我能找到的最好的就是使用sprintf ... mktime需要設置時間語言環境,而且我也不喜歡通過時間戳來格式化日期。

所以,只是打印格式字段:

// Parse from YYYY-MM-DD to associative array 
$date = date_parse_from_format("Y-m-d", "2014-07-15"); 
// Write back to DD/MM/YYYY with leading zeros 
echo sprintf("%02d/%02d/%04d", $date["day"], $date["month"], $date["year"]); 

編輯:但這種解決方案需要一些調整,如果你需要,例如,要打印剛剛過去的2個數字,從1984年每年(例如,以「84 「)。

+1

沒有太多的調整......只是做'$日期[ 「年」]%100'你會得到最後2位數字快。 –

0

我使用日期選取器的形式,和返回格式是一個數組:

[開始] =>數組([月] => 04 [天] => 26 [年] => 2016 [陣列([月] => 04 [日] => 26 [年] => 2016 [小時] => 05 [小時] => 05 [分鐘] => 54 [子午線=分鐘] => 54 [子午線] =>時)

對該數組迄今對象轉換的方式是如下:

$timeArray = $this->request->data['Task']['start']; 
$start = $this->Task->deconstruct('start', $timeArray); 

我的模型是「任務」和密鑰的日期陣列是「開始」,你需要更換這兩個領域與你自己的。

和日期對象的輸出是:

2016-04-26 17:54:00 

參考:How best to convert CakePHP date picker form data to a PHP DateTime object?

相關問題