2012-07-04 45 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?

相关问题