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

时间:2010-10-28 20:23:05

标签: php mysql datetime cakephp

我在MySQL中有一个datetime列,我们称之为$time。它将以CakePHP形式出现。如果我试着回应它,我得到的只是“阵列”。如果我print_r()就可以了:

Array ( [month] => 10 [day] => 30 [year] => 2010 [hour] => 16 [min] => 30 )

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

echo $time['month'].'-'.$time['day'].'-'.$time['year'].' '.$time['hour'].':'.$time['min'];

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

6 个答案:

答案 0 :(得分: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);

有关使用DateTime类的更面向对象的方法,请参阅Gordon's answer

答案 1 :(得分:5)

你可以这样做:

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

您可以将任何格式放入format() date()支持的格式 你不需要PHP5.3。

如果您需要创建一个尚未包含在数组中的日期,请使用上述内容。如果您只想要一个'Y-m-d H:i'格式,可以使用

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

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

vprintf('%3$d-%1$02d-%2$02d %4$02d:%5$02d', $time);

毋庸置疑,您还可以使用vsprintfsprintf创建可以使用DateTimestrtotime进行解析的日期时间字符串,例如

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

然后您可以按照第一个示例中所示进行格式化。

答案 2 :(得分:2)

  

我必须这样:

这是一个选择,是的。

  

或者我可以使用日期功能吗?

不包含当前表格中的数据。

您可以考虑将数组转换为适当的时间戳或DateTime对象,以便在格式化,计算等方面获得最大的灵活性。

  • 有关时间戳,请参阅mktime()(您必须将其提供给阵列成员。更新:@BoltClock有一个示例。)

  • 对于DateTime对象 - 它是PHP5的新的,面向对象的Year 2038 bug-free,以及处理日期的更好方法 - 请参阅CreateFromFormat()(需要PHP 5.3及更多,虽然)

答案 3 :(得分:1)

date()函数有一个可选参数$ timestamp。您可以echo date("MM-dd-yyyy hh:mm, $time)并避免手动格式化。

我希望在MySQL中将$ time值声明为TIMESTAMP以使其正常工作

答案 4 :(得分:1)

日期功能需要时间戳。但您可以使用自定义函数,例如:

function fd($time) {
   return "$time[month]-$time[day]-$time[year] $time[hour]:$time[minute]";
}

// Sample usage
echo fd($time);

答案 5 :(得分:0)

时间助手不符合这里的需求吗?只需将整个数组传递给它并使用它提供的功能。