2009-09-13 32 views
5

Đang cố gắng để hiển thị thời gian hiện tại với PHP (sử dụng this):Khoanh vùng thời gian hiện tại trong PHP

$date = date('m/d/Y h:i:s a', time());      
echo $date; 

Đơn giản như nó được. Làm cách nào để tôi bản địa hóa? Tôi muốn dịch những tháng và ngày sang tiếng Do Thái.

Cảm ơn.

Trả lời

8

Zend_Date hoàn toàn được quốc tế hóa. Bạn nên kiểm tra ra một cách đơn giản để làm điều đó:

Tất cả các tên đầy đủ và viết tắt của tháng và các ngày trong tuần được hỗ trợ cho hơn 130 ngôn ngữ. Phương pháp hỗ trợ cả đầu vào và đầu ra của ngày sử dụng tên được bản địa hóa của tháng và ngày trong tuần, ở định dạng thông thường được liên kết với từng ngôn ngữ.

+0

Giải pháp đơn giản mà tôi đang tìm kiếm. Danke. –

+1

Điều này không giả định rằng bạn phải sử dụng khung công tác zend? không được đề cập trong câu hỏi. – KdgDev

+1

@WebDevHobo - không, bạn không cần phải sử dụng toàn bộ điều, các thành phần của nó được kết hợp lỏng lẻo bởi thiết kế. – karim79

5

Thực ra, tôi không nghĩ rằng nó là khá tốt trong PHP 5.2 :-(

Ít nhất, không phải với những gì đang đi kèm với/trong PHP (Có thư viện mã hóa trong PHP mà bạn có thể sử dụng, mặc dù , giống như câu trả lời khác chỉ ra)


với PHP 5.3, tuy nhiên, bạn có lớp IntlDateFormatter, mà thực hiện chính xác những gì bạn muốn:

lớp này đại diện cho ngày ICU chức năng định dạng. Nó cho phép người dùng hiển thị ngày ở định dạng được bản địa hóa hoặc phân tích chuỗi thành PHP giá trị ngày bằng cách sử dụng các chuỗi mẫu và/hoặc mẫu được đóng hộp.

Ví dụ, sử dụng lớp đó, như thế này:

echo IntlDateFormatter::create('fr_FR', IntlDateFormatter::FULL, IntlDateFormatter::FULL)->format(time(time())) . "\n"; 
echo IntlDateFormatter::create('fr_FR', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT)->format(time(time())) . "\n"; 

echo IntlDateFormatter::create('zh-Hant-TW', IntlDateFormatter::FULL, IntlDateFormatter::FULL)->format(time(time())) . "\n"; 
echo IntlDateFormatter::create('zh-Hant-TW', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT)->format(time(time())) . "\n"; 

echo IntlDateFormatter::create('en_US', IntlDateFormatter::FULL, IntlDateFormatter::FULL)->format(time(time())) . "\n"; 
echo IntlDateFormatter::create('en_US', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT)->format(time(time())) . "\n"; 

Bạn sẽ nhận được:

dimanche 9 novembre 2008 23:54:47 GMT+00:00 
9 nov. 2008 23:54 
2008年11月9日星期日 下午11時54分47秒 GMT+00:00 
2008/11/9 下午 11:54 
Sunday, November 9, 2008 11:54:47 PM GMT+00:00 
Nov 9, 2008 11:54 PM 

nào trông khá đẹp, đúng không?

điều Sad là PHP 5.3 là chỉ một vài tháng tuổi, và không có sẵn trên nhiều dịch vụ lưu trữ ... Và sẽ yêu cầu kiểm tra (và có lẽ sửa chữa) cho ứng dụng của bạn ...


Suy nghĩ về nó : có thể bạn có thể cài đặt PECL intl extension trên PHP 5.2, và có cùng chức năng ...

+0

Có thể đáng lưu ý rằng định dạng IntlDateFormatter :: ($ time) sẽ không thành công nếu $ time là một chuỗi. Hãy chắc chắn rằng bạn luôn luôn vượt qua một số nguyên! (Thử nghiệm với Ubuntu 10.04 LTS và PHP 5.3.) –

2

Nếu bạn cần một cách đơn giản hơn Zend_Date và IntlDateFormatter, hãy thử chức năng chuẩn strftime trong php. Đây là những thứ tôi đã làm để có được nó và chạy với ngôn ngữ Nga chạy php 5.3 trên Ubuntu (miền địa phương của Nga đã không được cài đặt).

Để cài đặt locale

  1. cd /usr/share/locales
  2. sudo ./install-language_pack ru_RU
  3. sudo dpkg-reconfigure locales
  4. Restart Apache

Tiếp theo, sử dụng đoạn mã php sau:

setlocale(LC_TIME, 'ru_RU.UTF-8'); 
echo strftime('%A', time()); 

Nên xuất ngày hôm nay trong tuần.

+0

IMHO, cả hai 'IntlDateFormatter' (miễn là bạn đang chạy PHP 5.3 với cài đặt intl) và' Zend_Date' đơn giản hơn bất kỳ thứ gì yêu cầu 'setlocale()'. –

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