2009-08-14 19 views
10

Jeśli mam ciąg date:PHP Parse Data String

$date = "08/20/2009"; 

I chcę, aby oddzielić część daty:

$m = "08"; 
$d = "20"; 
$y = "2009"; 

Jak bym to zrobić?

Czy istnieje specjalna funkcja daty, której powinienem używać? Albo coś innego?

Dzięki!

Odpowiedz

14

explode rade na to:

Alternatywnie, można to zrobić w jednej linii (patrz komentarze - Dzięki szczęście):

list($m, $d, $y) = explode("/", $date); 
+5

listy ($ m $, d, $ y) = explode ("/", $ date); – Lucky

+0

@Lucky - dzięki, edytowane w. –

18

Jednym ze sposobów byłoby to zrobić :

$time = strtotime($date); 
$m = date('m', $time); 
$d = date('d', $time); 
$y = date('Y', $time); 
+0

ARGH! Uderzyłeś mnie w to! lol – Daniel

+1

Ah, ale twoja odpowiedź jest mocniejsza. –

+4

Strtotime nie zawsze działa ze względu na ograniczenie znacznika czasu. Powiedzmy, że chcesz przeanalizować pierwszą wojnę światową, nie możesz przekonwertować 28/08/1914 na prawidłowy znacznik czasu. –

2

Czy to zawsze tak jest? Czy będzie to w jakimkolwiek formacie pliku?

Spróbuj strtotime.

Coś jak:

if(($iTime = strtotime($strDate))!==false) 
{ 
echo date('m', $iTime); 
echo date('d', $iTime); 
echo date('y', $iTime); 
} 
-3

odpowiedź Dominika jest dobra, ale IF data jest ZAWSZE w takim samym formacie, można użyć to:

$m = substr($date,0,2); 
$d = substr($date,3,2); 
$y = substr($date,-4); 

i nie trzeba używać tablica lub eksploduje

Bill H

+0

Proszę, nie! Pomyśl o przyszłym czytniku kodów :) – GiDo

+0

Po co chcieć uniknąć wybuchu? * JEŻELI * data jest * ZAWSZE * w tym samym formacie, rozbijanie zadziała idealnie, a jak sugeruje @GiDo, będzie samo dokumentować pod względem intencji. Jeśli chcemy uniknąć tablicy, "listy" elementów do różnych zmiennych. – Sepster

1

jak ten temat:

list($m, $d, $y) = explode("/", $date); 

Szybkie jeden liner.

6

Sprawdź kod PHP date_parse function. Jeśli nie masz pewności, że dane wejściowe będą zawsze w spójnym formacie, ORAZ najpierw je zweryfikujesz, jest o wiele bardziej stabilny i elastyczny (nie wspominając o łatwiejszym), aby PHP spróbowało przeanalizować format dla ciebie.

np.

<?php 
//Both inputs should return the same Month-Day-Year 
print_r(date_parse("2012-1-12 51:00:00.5")); 
print_r(date_parse("1/12/2012")); 
?> 
3

Jeśli masz podany format, powinieneś użyć obiektu date.

$date = DateTime::createFromFormat('m/d/Y', '08/20/2009'); 
$m = $date->format('m'); 
$d = $date->format('d'); 
$y = $date->format('Y'); 

Uwaga: z pewnością można użyć tylko jednego połączenia z numerem DateTime::format().

$newFormat = $date->format('d-m-Y'); 
0

Dla umiędzynarodowionego data parsowania patrz IntlDateFormatter :: parse - http://php.net/manual/en/intldateformatter.parse.php

na przykład:

$f = new \IntlDateFormatter('en_gb', \IntlDateFormatter::SHORT, \IntlDateFormatter::NONE); 
$dt = new \DateTime(); 
$dt->setTimestamp($f->parse('1/2/2015'));