2009-07-11 28 views
15

Tôi cố gắng để ngày đầu ra theo định dạng Italia sử dụng date() như sau:PHP chức năng ngày đầu ra trong Ý

<?php 
    setlocale(LC_ALL, 'it_IT'); 
    echo date("D d M Y", $row['eventtime']); 
?> 

Tuy nhiên, nó vẫn được sắp ra trong định dạng tiếng Anh. Tôi có thể làm gì khác? Có điều gì sai không?

Các giải pháp phải là kịch bản cụ thể và không phải máy chủ rộng ...

Cảm ơn

Shadi

Trả lời

39

date() không phải là địa phương. Bạn nên sử dụng strftime() và định dạng của nó specifiers đến ngày locale-aware đầu ra (từ hướng dẫn date() PHP):

Để ngày định dạng bằng các ngôn ngữ khác, bạn nên sử dụng các chức năng setlocale()strftime() thay vì date().

Giới thiệu về Anti Veeranna Nhận xét của bạn là hoàn toàn đúng, vì bạn phải rất cẩn thận khi đặt ngôn ngữ vì đôi khi chúng không bị giới hạn phạm vi tập lệnh hiện tại. Cách tốt nhất sẽ là:

$oldLocale = setlocale(LC_TIME, 'it_IT'); 
echo utf8_encode(strftime("%a %d %b %Y", $row['eventtime'])); 
setlocale(LC_TIME, $oldLocale); 
+0

Hoàn hảo, đã hoạt động :) –

+3

Hãy nhớ rằng setlocale không phải là tập lệnh cụ thể, nó là chủ đề cụ thể, vì vậy có thể là ngôn ngữ thay đổi 'bên dưới' bạn. http://ee.php.net/setlocale cũng giải thích. –

+0

Nó thậm chí không chỉ là chủ đề cụ thể, nó là quá trình cụ thể. Vì vậy, bạn cũng có thể thay đổi các phiên bản PHP đang chạy khác. (http://www.php.net/manual/en/function.setlocale.php#refsect1-function.setlocale-notes) – apfelbox

2
+0

tôi đã sử dụng giải pháp của bạn ở đây: inmaremma.net Chỉ cần rằng các nhân vật giọng được trả lại như dấu hỏi. Tôi tin rằng tôi đã đặt đúng ngôn ngữ html thành tiếng Ý với –

+0

@AdiCumpanasu Bạn cũng có thể cần đặt bộ ký tự thành UTF-8. Đặt thông tin sau giữa '' và '': ''. – Sampson

+0

giải quyết nó gói như thế này: utf8_encode (strftime ("% A% d% B% Y")) –

3

it_IT locale đã được cài đặt/kích hoạt bởi admin máy chủ của bạn, nếu không điều này sẽ không hoạt động.

Vì vậy, giải pháp của Jonathan có lẽ là tốt nhất.

+0

Tôi có toàn quyền truy cập vào máy chủ, bất kỳ ý tưởng nào mà tôi có thể kiểm tra xem địa phương nào được cài đặt? –

+0

bằng cách nhập 'locale -a' nếu máy chủ đó đang chạy một số biến thể của Linux/BSD. –

2

tôi thấy rằng setlocale là không đáng tin cậy, vì nó được thiết lập cho mỗi quá trình, chứ không phải cho mỗi thread (hướng dẫn đề cập đến điều này). Điều này có nghĩa là các tập lệnh chạy khác có thể thay đổi ngôn ngữ bất kỳ lúc nào. Giải pháp đang sử dụng IntlDateFormatter từ tiện ích mở rộng intl php.

$fmt = new \IntlDateFormatter('it_IT', NULL, NULL); 
$fmt->setPattern('d MMMM yyyy HH:mm'); 
// See: http://userguide.icu-project.org/formatparse/datetime for pattern syntax 
echo $fmt->format(new \DateTime()); 

Nếu nó không hoạt động bạn có thể cần phải:

  • Install intl phần mở rộng php (ubuntu chẳng hạn): sudo apt-get install php5-intl

  • Cài đặt locale bạn muốn sử dụng: sudo locale-gen it_IT

0

Giới thiệu về rticle trên http://www.phpnews.it/articoli/ottenere-date-in-italiano/response, blog đề nghị một phương pháp khác, nhưng mã không hoạt động, đây là mã đúng:

function timestamp_to_date_italian($date) 
    {  
     $months = array(
       '01' => 'Gennaio', 
       '02' => 'Febbraio', 
       '03' => 'Marzo', 
       '04' => 'Aprile', 
       '05' => 'Maggio', 
       '06' => 'Giugno', 
       '07' => 'Luglio', 
       '08' => 'Agosto', 
       '09' => 'Settembre', 
       '10' => 'Ottobre', 
       '11' => 'Novembre', 
       '12' => 'Dicembre'); 

     list($day, $month, $year) = explode('-',date('d-m-Y', $date));  
     return $day . ' ' . $months[$month] . ' ' . $year; 

    } 
Các vấn đề liên quan