2010-08-31 18 views
6

Belgelere dayanarak, Perl ve MySQL arasındaki hafta sayılarının nasıl eşitleneceğini anlamanın zor bir zaman geçiriyorum.Haftalar için tarih biçimleri

Aynı saat dilimindeki bir unix zaman damgası temel alınarak aynı tam sayıyı hem Perl hem de MySQL'de nasıl hesaplayabilirim?

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

ve

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

herhangi bir zaman damgası için aynı hafta numaraları üretmelidir. İdeal olarak, hafta numarasının ISO 8601 gibi taşınabilir bir şey olmasını istiyorum. Testlerimdeki haftalık rakamlar bazen eşleşiyor olsa da, tarih formatlama işleminin aynı tanıma açıkça bağlı olduğunu doğrulayan hem Perl hem de MySQL belgelerinde hiçbir şey bulamıyorum.

Teşekkürler!

SELECT WEEKOFYEAR(from_unixtime(datefield)) FROM table; 

Maalesef sadece 1/2 aradığın cevap bu, ama yardımcı olur umarım: MySQL için

+0

PERL'de nasıl yaptığınızdan emin değilsiniz ancak MySQL'in bir WEEKOFYEAR() fn http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html# vardır. function_weekofyear – Mikey1980

cevap

4
Perl için DateTime modülüne bakın.

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

Not o yıl konularda, bir tarih önceki veya sonraki yıl için bir hafta içinde olabildiğince: Verilen DateTime nesne için yılın hafta sayısını dönebilir bir week() yöntemi sağlamaktadır. Bunun nedeni, yılın ilk haftasının Ocak ayının dördüncü gününü içerdiği "hafta" için ISO standardıdır. Böylece 1 Ocak gibi bir tarih, bir önceki yılın son haftasında olabilir.

Eğitimsiz bir göz için, MySQL'in YEARWEEK() işlevinin aynı şeyi yapabildiğini veya Mikey1980 suggests işlevini görebildiğini, WEEKOFYEAR() işlevini deneyin. sonuçta

yıl birinci ve yılın son haftası için tarih argüman yılın farklı olabilir: YEARWEEK() aynı şeyi yapar gibi its documentation söylediği gibi görünüyor.

... ama aynı şeyi yaptıklarını garanti edemem. :-)

+5

DateTime'ın 'week', ISO 8601 tanımını kullanır. MySQL'i aynısını yapmak için, mod 3'ü kullanın: 'YEARWEEK (from_unixtime (datefield), 3)'. – cjm

+1

Not: POSIX 'strftime' işlevinin'% U', _not_ hafta numarası için ISO 8601 tanımını kullanır. POSIX, ilk Pazar günü, Ocak ayının ilk günü olarak, ilk Pazar gününü tanımlar (bu, kısmi bir haftayı oluşturan herhangi bir gün önce 0). – cjm

İlgili konular