2011-09-30 45 views
7

Tôi đã gặp phải sự cố thú vị khi sử dụng chức năng date() của PHP. Đã không có bất kỳ may mắn định vị một cuộc thảo luận về điều này trên SO hoặc sử dụng Google, nhưng có thể ai đó khác đã gặp phải vấn đề tương tự trước đây?Nhận năm và tuần trong năm từ ngày PHP() khi tuần kéo dài hai năm

Tôi đang cố gắng đạt được NĂM và TUẦN NĂM cho một dấu thời gian cụ thể. Đây là mã tôi đang sử dụng:

date("Y-\WW");

Những kết quả đầu ra như ngày nay một cách chính xác: 2011-W39.

Vấn đề là khi cung cấp dấu thời gian, nếu dấu thời gian được đề cập là, vào ngày 3 tháng 1 năm 2011 (thực sự là một phần của "Tuần thứ 52 của năm 2010". PHP trả về đúng W52, nhưng nó cũng trả về 2011 là năm nay, thay vì 2010.

date("Y-\WW", 1294016400);

Đầu ra: 2011-W52

Bất kỳ ý tưởng về làm thế nào để giải quyết vấn đề này, tôi nên lưu ý rằng mặc dù trong trường hợp này nó sẽ là dễ dàng chỉ cần so sánh đó? strtotime() của đầu ra lớn hơnhiện tạivà điều chỉnh, nhưng tôi cần một giải pháp cũng sẽ hoạt động trong những năm trước (ví dụ: nếu điều tương tự xảy ra vào ngày 3 tháng 1 năm 2010).

+2

tôi chỉ thử nghiệm [ 'date ("Y-\ WW", 1294016400)' trong IDEOne và tôi nhận được '2011-W01 '] (http://ideone.com/HWyeo). – JRL

+0

Đó có thể là múi giờ hoặc ngôn ngữ địa phương. Tôi đã trả lời câu hỏi dưới đây, tôi nên đã sử dụng 'o' mới được thêm thay vì' Y'. –

Trả lời

23

Darn, rõ ràng là tôi không đọc lại các tài liệu hướng dẫn chặt chẽ đủ, chữ o đã được bổ sung trong PHP 5.1.0:

Từ tài liệu cho date():

tiêu chuẩn ISO-8601 năm con số. Giá trị này có cùng giá trị với Y, ngoại trừ nếu số tuần ISO (W) thuộc về năm trước hoặc năm tiếp theo, năm đó được sử dụng thay thế. (Thêm trong PHP 5.1.0)

Vì vậy, mã của tôi cần phải có được date("o-\WW");

+1

Khi tôi gặp phải vấn đề này, tôi không thể mơ ước tìm được câu hỏi SO với cùng một mối quan tâm và câu trả lời đơn giản như vậy (tôi cũng chưa đọc đủ tài liệu). Cảm ơn rất nhiều ! – neemzy

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