2013-01-24 10 views
5

Zostałem poproszony o napisanie modułu dla naszego systemu billingowego i wypełnienie go wszystkimi funkcjami, do których jestem przyzwyczajony. Został przetestowany na instalacji w języku angielskim, ale nie brałem pod uwagę (ani nie zdawałem sobie sprawy) z faktu, że rzeczywisty system używany przez naszą firmę to język francuski.Konwertuj strtotime() na StrFTime()

Kod, który napisałem jest ...

$due_date = strtotime($next_due_date); 
$today = date('Y-m-d'); 
$today_date = strtotime($today); 

if ($due_date > $today_date) { 

Jednak jestem zaznajomiony z STRFTIME i zastanawiasz się w jaki sposób można go używać, aby uzyskać ten kod do pracy francuskiego lokalizacji?

+0

W francuskiej wersji językowej, co "$ next_due_date" zawiera jako ciąg znaków reprezentujący datę? – shadyyx

+0

Czym dokładnie jest problem, przed którym stoisz i co nie działa tak, jak powinno? Czy możesz pokazać przykładowe dane? –

+0

http://php.net/manual/en/function.strftime.php – bodi0

Odpowiedz

0

Wykonaliśmy prosty i szybki przykład. Nadzieję, że to pomaga

<?php 
     setlocale(LC_ALL, 'fra_fra'); 

     $today = date('Y-m-d'); 
     $date_string = utf8_encode(strftime('%d %B %Y', strtotime($today))); 
     echo $date_string; 
?> 
1

najpierw należy użyć setlocale

setlocale(LC_TIME, "fr_FR"); 

drugie, aby porównać datę jako ciąg lub int powinny nadal korzystać strtotime i nie strftime. (Lub można użyć zawsze ciąg w formacie YYYY-mm-dd

strftime jest wyłącznie do daty przedstawiają jako ciąg. Jeśli chcesz przechowywać go, albo go manipulować, należy użyć standardowego formatu i nie zlokalizowaną. Zobacz doc

aby uniknąć niejednoznaczności, najlepiej używać ISO 8601 (RRRR-MM-DD) dat ani DateTime :: createFromFormat(), jeśli to możliwe.

więc ewentualny kod

//$next_due_date must be in a standard format like YYYY-mm-dd (but not only) 
$due_date = strtotime($next_due_date); 
$today_date = time(); 

if ($due_date > $today_date) { 
    echo strftime("%c",$due_date) . " is in the future"; 
}