2010-04-09 46 views
27

Tôi đang sử dụng API twitter để trả về danh sách các cập nhật trạng thái và thời gian chúng được tạo. Nó trả lại ngày tạo theo định dạng sau:Phân tích cú pháp API Twitter Datestamp

Fri Aug 09 12:53:54 +0000 2010

gì là cách đơn giản nhất (với PHP hoặc Javascript) để định dạng như 09-04 này -2010?

Trả lời

31

strtotime("dateString"); đưa nó vào định dạng ngày gốc PHP, sau đó bạn có thể làm việc với hàm date() để làm cho nó được in ra theo cách bạn muốn.

+0

Đó là âm thanh nhờ tốt, $ time = strtotime ($ kết hợp cụm từ> created_at); \t \t \t \t \t \t \t \t \t \t \t echo $ thời gian; là cho tôi nó như thế này ... 1270817634. ​​Làm thế nào để tôi sử dụng hàm date() với điều đó? –

+3

Ah chờ đã, làm cho nó hoạt động. ngày ("jS F Y", $ time) cho tôi ngày 9 tháng 4 năm 2010. Cảm ơn! –

+0

Vâng, ngày phân tích trong PHP là khá tốt hình thành. Lưu ý rằng strtotime sẽ chấp nhận ALMOST bất cứ điều gì bạn ném vào nó. Nó đắt tiền nhưng khá mạnh mẽ. –

3

Javascript. Như @Andy đã chỉ ra, sẽ là một bitch khi nói đến IE. Vì vậy, tốt nhất nên dựa vào một thư viện làm điều đó một cách nhất quán. DateJS có vẻ như là một thư viện đẹp.

Khi thư viện được thêm vào, bạn sẽ phân tích và định dạng nó như:

var date = Date.parse("Fri Apr 09 12:53:54 +0000 2010"); 
var formatted = date.toString("dd-MM-yyyy"); 

Trong PHP bạn có thể sử dụng các chức năng ngày hoặc lớp DateTime cũng làm như vậy (có sẵn từ PHP 5.2.0):

$date = new DateTime("Fri Apr 09 12:53:54 +0000 2010"); 
echo $date->format("d-m-Y"); // 09-04-2010 
+0

Điều này cung cấp 'NaN' trong Internet Explorer, mặc dù nó hoạt động trong Chrome. IE đấu tranh với '+ 0000'. –

+0

cảm ơn Andy. tốt nhất để đi phía máy chủ, hoặc sử dụng một thư viện phân tích ngày như một datejs – Anurag

+0

Ngoài ra còn có một thư viện jQuery PHPDate tốt có sẵn (thông qua google) –

6

JavaScript có thể phân tích thời điểm đó nếu bạn loại bỏ các +0000 từ chuỗi:

var dStr = "Fri Apr 09 12:53:54 +0000 2010"; 
dStr = dStr.replace("+0000 ", "") + " UTC"; 
var d = new Date(dStr); 

Chrome - và tôi nghi ngờ một số trình duyệt không phải IE khác - thực sự có thể phân tích cú pháp nó với hiện diện +0000 trong chuỗi, nhưng bạn cũng có thể loại bỏ nó để có khả năng tương tác.

PHP có thể phân tích cú pháp ngày với strtotime:

strtotime("Fri Apr 09 12:53:54 +0000 2010"); 
+0

cảm ơn, tôi đã đi với tùy chọn strtotime. Tuy nhiên, ví dụ Javascript của bạn chỉ trả lời một câu hỏi khác mà tôi có, cảm ơn! –

+0

Tuy nhiên, chuỗi ngày ban đầu có thể là UTC (và do đó là +0000). 'new Date()' sẽ phân tích nó theo múi giờ địa phương. –

+3

Điều này được phân tích theo múi giờ chính xác: 'dStr = dStr.replace (" + 0000 "," ") +" GMT "; ' –

45

Cross-trình duyệt, múi giờ nhận thức phân tích cú pháp thông qua JavaScript:

var s = "Fri Apr 09 12:53:54 +0000 2010"; 

var date = new Date(
    s.replace(/^\w+ (\w+) (\d+) ([\d:]+) \+0000 (\d+)$/, 
     "$1 $2 $4 $3 UTC")); 

Thử nghiệm trên IE, Firefox, Safari, Chrome và Opera .

+13

Câu trả lời hay. Tại sao Twitter lại ổn định định dạng ngày khủng khiếp này? – brad

3

Đây là định dạng ngày cho Twitter API:

Sat Jan 19 20:38:06 +0000 2013 
"EEE MMM dd HH:mm:ss Z yyyy" 
+0

Ý nghĩa của chữ "Z" ở đây là gì? Đó là khu vực? +0000? Điều gì sẽ là thời gian trong IST? GMT +5: 30 –

+0

@SANDHYALALKUMAR thats RFC 822 Múi giờ // https://gist.github.com/romaonthego/5138532 – k06a

+1

Tôi nghĩ tất cả chúng ta đều có thể đồng ý rằng nó sucks –

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