2010-11-02 9 views
3

quelqu'un peut-il me procurer un code pour cacher l'horodatage d'une chaîne. J'ai utilisé ce code pour obtenir la date de la chaîne supposons que lasupprimer l'horodatage de la chaîne

$date_string = "02/06/2011 11:00 am - 2:00 pm"; 

$date = strtotime($date_string); 
$date = date('m/d/y', $date); 

Mais la eteint je reçois est quelque chose comme ça

1/1/70 

S'il vous plaît suggérer une meilleure façon que je puisse mettre en œuvre pour cela fonctionne Je veux montrer comme

02/06/2011 
+0

est-ce que la chaîne de date est masquée? Pourquoi ne le partagez-vous pas? – nerkn

+0

Ce serait bien si vous ajoutez ce que la chaîne contient en premier. – Shikiryu

+0

et il serait utile de voir comment vous produisez la valeur finale de la date $ – heximal

Répondre

4

Si la date que vous recherchez est déjà dans la chaîne et tout ce que vous voulez faire est de supprimer la plage de temps, vous ne pas besoin de manipulation de date. Supprimez simplement tout après l'espace (en supposant que le format du date_string reste cohérent).

$date_string = "02/06/2011 11:00 am - 2:00 pm"; 
$date = explode(" ",$date_string); 
echo $date[0]; 

Ou encore plus simple (mais non testé)

echo strtok($date_string," "); //http://codepad.org/Or1mpYOp 

PHP.NET:strtok

PHP.NET:explode

+1

Vous gagnez une ligne avec: 'echo $ date [0];' Je pense que c'est la meilleure solution ici. Bien sûr, cela dépend de l'origine de '$ date_string' et s'il peut contrôler son format. – Shikiryu

+1

oh et: http://codepad.org/KAec6ehi pour l'OP – Shikiryu

+0

C'est excellent. Merci pour le lien! Bookmarked .... –

3
$date = strtotime($date_string); 
$date = getdate($date); 
$date = $date['mon'] . '/' . $date['mday'] . '/' . $date['year'] 
+0

renvoie la date comme '1/1/1970' –

+0

Cette solution fonctionne très bien pour moi. –

+0

Réalisé c'était parce que j'ai utilisé une chaîne de date réelle par opposition à la chaîne de plage de dates fournie dans la question –

1

Si 02/06/2011 11:00 am - 2:00 pm est ce qui s'affiche, vous affichez évidemment $date_string et non $date, car strtotime('02/06/2011 11:00 am - 2:00 pm'); renvoie booléen false, que date('m/d/y', $date) convertirait en 01/01/1970.

Essayez quelque chose comme ça

$date_string = "02/06/2011 11:00 am - 2:00 pm"; 
$date_exploded = explode('-',$date_string); 

$date = strtotime($date_exploded[0]); 
$date = date('m/d/y', $date); 
echo $date; 
+0

obtenir "01/01/70" –

+0

Je ne sais pas pourquoi. Ici, ce code fait écho '02/06/11' – Mchl

0

En laissant de côté le fait que quelque chose va très mal dans l'analyse syntaxique de ce jour, vous devez être conscient que l'utilisation d'un format de date de 00/00/00 [00] est plutôt ambigu - aux États-Unis, les dates écrites de cette manière sont au format mm/jj/aa [yy] whi Au Royaume-Uni, il est interprété comme jj/mm/aa [aa]. La fonction strtotime n'utilise pas les paramètres régionaux pour déterminer laquelle s'applique et assume toujours la première.

Si on me demandait d'analyser ceci, j'irais avec l'aide de preg pour extraire la partie de date. L'utilisation d'un modèle:

/([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{2,4})/ 

donne un tableau

0=> 02/06/2011 
1=> 02 
2=> 06 
3=> 2011 

Utilisez ensuite mktime pour générer le timstamp unix.

D'autres approches incluent l'utilisation de substr pour extraire une chaîne de longueur fixe, ou l'exploitation par espace pour obtenir des mots.

0

Si votre chaîne est déjà datée.

$ date = substr ($ enregistrements [$ datetime, 0, 10);