2010-08-31 47 views
6

Tôi đang gặp một thời gian khó khăn, dựa trên tài liệu, tìm ra cách để so sánh số tuần giữa Perl và MySQL.Định dạng ngày cho tuần

Tôi làm cách nào để tính cùng một số tuần chính xác trong cả Perl và MySQL dựa trên dấu thời gian unix trong cùng múi giờ?

SELECT DATE_FORMAT(from_unixtime(datefield), '%Y%U') FROM table; 

print strftime('%Y%U', localtime($datevar)); 

nên sản xuất số tuần giống hệt nhau cho bất kỳ dấu thời gian nhất định. Lý tưởng nhất là tôi muốn số tuần là thứ gì đó mang tính di động, chẳng hạn như ISO 8601. Mặc dù số tuần trong thử nghiệm của tôi dường như trùng khớp đôi khi, tôi không thể tìm thấy bất kỳ thứ gì trong tài liệu cho cả Perl và MySQL xác nhận rằng định dạng ngày rõ ràng tuân thủ cùng một định nghĩa.

Cảm ơn!

+0

Không chắc chắn cách bạn thực hiện trong PERL nhưng MySQL có WEEKOFYEAR() fn http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html# function_weekofyear – Mikey1980

Trả lời

4

Đối với Perl, hãy xem mô-đun DateTime. Nó cung cấp một phương pháp week(), có thể trả về số tuần của năm tương ứng với một DateTime đối tượng:

($week_year, $week_number) = $dt->week; 

Lưu ý rằng các vấn đề năm, như một ngày có thể được trong một tuần cho năm trước hoặc sau. Điều này là do tiêu chuẩn ISO cho "tuần", trong đó tuần đầu tiên của năm là ngày có chứa ngày thứ tư của tháng Giêng. Vì vậy, một ngày như ngày 1 tháng 1 có thể là vào tuần cuối cùng của năm trước.

Để mắt chưa được đào tạo, có vẻ như chức năng YEARWEEK() của MySQL có thể làm điều tương tự, hoặc là Mikey1980 suggests, hãy thử chức năng WEEKOFYEAR(). Dường như YEARWEEK() làm điều tương tự, như its documentation nói:

Năm trong kết quả có thể khác so với năm trong đối số ngày cho người đầu tiên và tuần cuối cùng của năm.

... nhưng tôi không thể đảm bảo họ cũng làm như vậy. :-)

+5

'Tuần' của DateTime sử dụng định nghĩa ISO 8601. Để có được MySQL để làm như vậy, sử dụng chế độ 3: 'YEARWEEK (from_unixtime (datefield), 3)'. – cjm

+1

Lưu ý: Hàm '% U' của POSIX'% U' không _not_ sử dụng định nghĩa ISO 8601 cho số tuần. POSIX định nghĩa ngày chủ nhật đầu tiên trong tháng 1 là ngày đầu tiên của tuần 1 (với bất kỳ ngày nào trước khi hình thành một phần tuần 0). – cjm

2

Đối với MySQL Query thử này:

SELECT WEEKOFYEAR(from_unixtime(datefield)) FROM table; 

Xin lỗi nó chỉ 1/2 câu trả lời bạn đang tìm kiếm, nhưng tôi hy vọng nó sẽ giúp!

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