2017-10-09 53 views
0

这是我已经完成的东西,我想知道是否有一种方法来清理代码并正常工作。PHP/MySQL:列出并爆炸多个字符

我有一个用户加入日期和时间的表格(YYYY-MM-DD HH:MM:SS)。我想,所以我用两个listexplode功能分裂的各种值,但只能够分割一个组值:

$joined = $row ["joined"]; // <- "2008-06-03 15:01:08" 
list ($year, $month, $day) = explode ("-", $joined); 
list ($hour, $minute, $second) = explode (":", $joined); 
list ($seperation) = explode (" ", $joined); 
echo $joined . "<br>\n"; 
echo $year . "<br>\n"; 
echo $month . "<br>\n"; 
echo $day . "<br>\n"; 
echo $hour . "<br>\n"; 
echo $minute . "<br>\n"; 
echo $second . "<br>\n"; 

下面是输出:

2008-06-03 15:01:08 ($joined) 
2008 ($year) 
06 ($month) 
03 15:01:08 ($day) 
2008-06-03 15 ($hour) 
01 ($minute) 
08 ($second) 

我“M想知道我怎么能炸开3个字符(破折号,冒号和空格),以便能够正确地使用变量,让它看起来如下:

2008-06-03 15:01:08 ($joined) 
2008 ($year) 
06 ($month) 
03 ($day) 
15 ($hour) 
01 ($minute) 
08 ($second) 
+0

提供的解决方案是否正常工作? – mega6382

+1

刚刚检查。它做了。非常感谢你。 –

回答

2

尝试以下操作:

$year = date("Y", strtotime($joined)); 
$month = date("m", strtotime($joined)); 
$day = date("d", strtotime($joined)); 
$hour = date("H", strtotime($joined)); 
$minute = date("i", strtotime($joined)); 
$second = date("s", strtotime($joined)); 

还是一个更好的解决方案:

$date = getdate(strtotime($joined)); 

当日期打交道的时候,最好使用日期解析,而不是explode,或正则表达式。以上使用strtotime()将日期字符串转换为Unix时间戳,然后根据日期模式输出它们。

而第二种解决方案更好,因为它返回时间字段的关联数组。

但是,如果你真的想要使用list()explode,这里是一个解决方案。

list($date, $time) = explode(" ", $joined); 
list ($year, $month, $day) = explode ("-", $date); 
list ($hour, $minute, $second) = explode (":", $time); 

它首先分离的日期和时间,然后分别对他们使用explode

+1

而不是多次调用'date()'和'strtotime()',使用'getdate(strtotime($ joined))''。它返回一个包含时间所有字段的关联数组。 – Barmar

+0

@Barmar谢谢你,很好的解决方案,我也将这个包含在答案中。 – mega6382