2017-10-09 16 views
0

C'est quelque chose que j'ai presque terminé et je me demande s'il existe un moyen de nettoyer le code et de fonctionner correctement.PHP/MySQL: liste Et exploser plusieurs caractères

J'ai une table avec la date et l'heure auxquelles un utilisateur s'est joint (AAAA-MM-JJ HH: MM: SS). Je voulais séparer les différentes valeurs alors j'ai utilisé deux listexplode fonctions, mais il ne peut diviser un groupe de valeurs:

$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"; 

Ce qui suit est la sortie:

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) 

I 'M voulant savoir comment je peux exploser les 3 personnages (le tableau de bord, du côlon et de l'espace) pour pouvoir utiliser correctement les variables et ont ressembler à ce qui suit:

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

La solution fournie a-t-elle fonctionné? – mega6382

+1

Je viens de vérifier. Ça faisait. Merci beaucoup. –

Répondre

2

Effectuez les opérations suivantes:

$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)); 

Ou une meilleure solution:

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

Lorsque vous traitez avec des dates, il est préférable d'utiliser l'analyse syntaxique de date au lieu de explode ou regex. Ce qui précède utilise strtotime() pour convertir la chaîne de date en timestamp Unix, puis les affiche en fonction des modèles de date.

Et la deuxième solution est bien meilleure car elle renvoie un tableau associatif de champs temporels. Mais si vous voulez vraiment utiliser list() et explode, voici une solution.

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

Il sépare date et l'heure d'abord, et utilise ensuite explode sur eux séparément.

+1

Au lieu d'appeler 'date()' et 'strtotime()' plusieurs fois, utilisez 'getdate (strtotime ($ joint))'. Il renvoie un tableau associatif avec tous les champs de l'heure. – Barmar

+0

@Barmar Merci, très bonne solution, je vais inclure cela dans la réponse aussi. – mega6382