我在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
功能吗?
答案 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);
毋庸置疑,您还可以使用vsprintf
或sprintf
创建可以使用DateTime
或strtotime
进行解析的日期时间字符串,例如
$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)
时间助手不符合这里的需求吗?只需将整个数组传递给它并使用它提供的功能。