2015-07-23 16 views
16

Muszę przeanalizować ciąg daty w aplikacji wielojęzycznej. Każdy użytkownik ma swoje ustawienia regionalne, a następnie ich format daty.PHP: Przetwórz datę w zlokalizowanym formacie

Jak używać:

new DateTime($datestr); 

lub

date_parse($datestr); 

ze zlokalizowaną format daty?

Zakładając dd/mm/rrrr jak data formacie EN i dd/mm/rrrr jako dniem formacie zrobiłem tego testu:

<?php 
echo "EN locale<br>\r\n"; 
setlocale(LC_ALL, 'en_US'); 
$date="01/02/2015"; //2th Jan 
$date_array=date_parse($date); 
$mktime=mktime($date_array['hour'], $date_array['minute'], $date_array['second'], $date_array['month'], $date_array['day'], $date_array['year']); 
$datetime=new DateTime($date);  
echo date("Y-m-d",$mktime); 
echo "<br>\r\n"; 
echo $datetime->format('Y-m-d'); 
echo "<br>\r\n"; 

echo "IT locale<br>\r\n"; 
setlocale(LC_ALL, 'it_IT'); 
$date="01/02/2015"; //1th Feb 
$date_array=date_parse($date); 
$mktime=mktime($date_array['hour'], $date_array['minute'], $date_array['second'], $date_array['month'], $date_array['day'], $date_array['year']); 
$datetime=new DateTime($date);  
echo date("Y-m-d",$mktime); 
echo "<br>\r\n"; 
echo $datetime->format('Y-m-d'); 

wynik jest wyjście SAME, zarówno lokalnych ustawień parse jest dostarczane w formacie mm/dd/rrrr. Wyjście było zawsze 2015-01-02 (2 lutego)

+0

zobaczyć to podobne pytanie o to, czego potrzebujesz http://stackoverflow.com/questions/8827514/get-date-format-according- do-locale-w-php. będziesz musiał użyć 'set_locale' wraz z' getDateFormat' –

+0

Dlaczego nie mogę znaleźć żadnych dokumentów na temat getDateFormat()? – Tobia

+0

przepraszam @Tobia, Byłem w pośpiechu, pisząc mój komentarz, getDateFormat, jest niestandardową funkcją, która zwróci format daty w zależności od lokalizacji –

Odpowiedz

6

To jest odpowiedź:

$formatter = new IntlDateFormatter("en_US", IntlDateFormatter::SHORT, IntlDateFormatter::NONE); 
$unixtime=$formatter->parse($date); 

I to jest poprzednia próba pracy z moją odpowiedź.

<?php 
echo "EN locale<br>\r\n"; 
$date="01/02/2015"; //2th Jan 
$formatter = new IntlDateFormatter("en_US", IntlDateFormatter::SHORT, IntlDateFormatter::NONE); 
$unixtime=$formatter->parse($date); 
$datetime=new DateTime(); 
$datetime->setTimestamp($unixtime); 
echo $datetime->format('Y-m-d'); 
echo "<br>\r\n"; 

echo "IT locale<br>\r\n"; 
$date="01/02/2015"; //1th Feb 
$formatter = new IntlDateFormatter("it_IT", IntlDateFormatter::SHORT, IntlDateFormatter::NONE); 
$unixtime=$formatter->parse($date); 
$datetime=new DateTime(); 
$datetime->setTimestamp($unixtime); 
echo $datetime->format('Y-m-d'); 
echo "<br>\r\n"; 

Niestety nie mogę zarabiać na nagrodę ... :-)

-2
<?php 
echo "EN locale<br>\r\n"; 
setlocale(LC_ALL, 'en_US'); 
$date="01/02/2015"; //2th Jan 
$date_array=date_parse($date); 
$mktime=mktime($date_array['hour'], $date_array['minute'], $date_array['second'], $date_array['month'], $date_array['day'], $date_array['year']); 
$datetime=new DateTime($date);  
echo date("m/d/Y",$mktime); 
echo "<br>\r\n"; 
echo $datetime->format('m/d/Y'); 
echo "<br>\r\n"; 

echo "IT locale<br>\r\n"; 
setlocale(LC_ALL, 'it_IT'); 
$date="01/02/2015"; //1th Feb 
$date_array=date_parse($date); 
$mktime=mktime($date_array['hour'], $date_array['minute'], $date_array['second'], $date_array['month'], $date_array['day'], $date_array['year']); 
$datetime=new DateTime($date);  
echo date("d/m/Y",$mktime); 
echo "<br>\r\n"; 
echo $datetime->format('d/m/Y'); 

Są to zmiany, ale powinieneś być w stanie skopiować i wkleić powyższy kod i będzie działać tak, jak chcesz.

echo date("d/m/Y",$mktime); 
echo date("m/d/Y",$mktime); 
echo $datetime->format('m/d/Y'); 
echo $datetime->format('d/m/Y'); 

Referance http://php.net/manual/en/function.date.php

+1

żartujesz ze mnie? Rozwiązaniem jest ręczna zmiana formatu daty ... Chcę przeanalizować datę zgodnie z lokalizacją użytkownika, którą może być każdy. W moim pytaniu napisałem ten kod 'echo date (" Y-m-d ", $ mktime);' aby pokazać, że z locale differente sparsowana data była taka sama. – Tobia

+0

Nie sądzę, że w php jest sposób automatyzacji tego, co chcesz zautomatyzować. Myślę, że należy to zrobić ręcznie. – kayleighsdaddy

+0

Byłoby to wstydem ... ponieważ proces odwrotny (sformatuj datę zgodnie z ustawieniami regionalnymi użytkownika) istnieje, więc informacje o formacie daty lokalnej istnieją gdzieś w bibliotekach php. – Tobia

Powiązane problemy