如何从数组中回显PHP中的格式化日期

pg.*_*pg. 1 php mysql datetime cakephp

我在MySQL中有一个datetime列让我们调用它$time.它将以CakePHP形式出现.如果我试图回应它,我得到的只是"阵列".如果我print_r()在上面,我得到:

Array ( [month] => 10 [day] => 30 [year] => 2010 [hour] => 16 [min] => 30 )
Run Code Online (Sandbox Code Playgroud)

我希望将此作为格式化日期回应,似乎没有任何效果,因为它不是字符串而是数组.我必须这样:

echo $time['month'].'-'.$time['day'].'-'.$time['year'].' '.$time['hour'].':'.$time['min'];
Run Code Online (Sandbox Code Playgroud)

或者我可以使用该date功能吗?

Bol*_*ock 8

一种简单,程序化的方法是date()与之结合使用mktime(),就像这样.date()基于UNIX时间戳的格式; mktime()根据您的数组值提供时间戳:

$timestamp = mktime($time['hour'], $time['min'], 0, $time['month'], $time['day'], $time['year']);
echo date('M-d-Y H:i', $timestamp);
Run Code Online (Sandbox Code Playgroud)

有关DateTime课程的更加面向对象的方法,请参阅Gordon的答案.


Gor*_*don 5

你可以做:

$dt = new DateTime;
$dt->setDate($time['year'], $time['month'], $time['day']);
$dt->setTime($time['hour'], $time['minute']);
echo $dt->format(DateTime::ISO8601);
Run Code Online (Sandbox Code Playgroud)

您可以将任何格式放入format()其中date().
你不需要PHP5.3.

如果需要创建数组中尚未包含的日期,请使用上述内容.如果你只是想要'Ymd H:i'格式,你可以使用

printf("%d-%02d-%02d %02d:%02d",
       $time['year'], $time['month'], $time['day'],
       $time['hour'], $time['min']);
Run Code Online (Sandbox Code Playgroud)

或者使用参数交换并传递整个数组(尽管你必须依赖于顺序):

vprintf('%3$d-%1$02d-%2$02d %4$02d:%5$02d', $time);
Run Code Online (Sandbox Code Playgroud)

不用说,您也可以使用vsprintfsprintf创建一个可以用DateTime或解析的日期时间字符串strtotime,例如

$dt = new DateTime(vsprintf('%3$d-%1$02d-%2$02d %4$02d:%5$02d', $time));
Run Code Online (Sandbox Code Playgroud)

然后你可以格式化,如第一个例子中所示.