"Outlook" vs ISO-8601 hafta numaralandırma

4 Cevap php

Ben haftalık müşteriler ödüyor bir sisteme sahip olarak Geçenlerde, büyük bir sorun geldi.

Hepimizin bildiği gibi, bir yıl 52 hafta var, ve bunun için standartları vardır. Ben bir tarihten itibaren hafta numarasını almak için PHP aka tarih ('W') kullanıyorum, o hesaplar standart ISO-8601 göre.

İşte bazı referanslar şunlardır:

Ama burada SORUN var: 2009 yılı 53 hafta var. Bu 400 yıl içinde Gregoryen takvimi ile 53 hafta var 71 yıl var gibi görünüyor. Ben bilmiyordum bir şey, ve muhtemelen birçok yanı yoktu.

Vikipedi göre:

2009-12-31 (ISO 2009 yılı başlar ve Perşembe biter, hem de üç gün ile sona erer Gregoryen 2009 yılını, uzanan, 53 hafta var) 2009-W53-4'tür.

ve PHP tarih fonksiyonu tamamen saygı duyuyor.

If you look into MS Outlook, and show day of the week in the calendar view, it will appear 52 weeks considering 28 DEC 2009 to 03 JAN 2010 week 1. Is this another standard? The US standard or something?

Eğer öyleyse, o zaman neden PHP destek değil mi? Herkes bu desteklenen bir işlev yapmak mı?

O 53 hafta var doğru mudur? Biz Avrupa ve ABD müşterileri de var.

4 Cevap

Burada bir sorun var sanmıyorum. Gerçek tarih ve saat biçimlendirme ve sayım için uluslararası bir standart takip olmasıdır (ISO8601). Eğer şikayet herhangi bir müşteri varsa, sadece standart onları bakın.

Outlook'un hafta numaralandırma aşağıdaki somewhat eşdeğerdir:

$dummyWeek = floor((date('z') + (date('N') - 1)) / 7) + 1;

Faturalandırma amaçları için, bir standart olarak kullanan ISO8601 daha iyi olur. Eğer bu sene doldurmak için gidiyoruz vergilere bakarsanız aslında, bunlar uzun 53 hafta olarak geçen mali yıl anlatacağız.

Sayma Outlook yolu ile sorun bir haftada 7 gün olmak üzere garanti olmasıdır. Örneğin, OW01-2010 sadece 2 gün tehlikeye:. Cum 1 Ocak, Cumartesi 2 Ocak Bu bir hafta boyunca bir çok kısa fatura dönemi bulunuyor.

ISO8601 hafta her 4/5/6 yılda bir sıçrama-hafta ihtiyacımız var uzun 7 gün olması garanti edilir.

Bu seçeneklerden hangisini tercih edersiniz:

  • ISO8601: Arada bir 53 hafta olması, ancak bunların her biri 7 gün uzun.
  • Outlook: rasgele bir yıl içinde 52/53 hafta olması, ancak bir "yarı-hafta" için iki kez bir yıl ödemek zorunda.

Outlook hafta numaralandırma için standart her türlü takip etmez. Bu "Haftanın ilk günü" ve "Yılın İlk hafta" denilen, hafta numaralandırma belirleyen iki ayar vardır.

"İlk 4 günlük hafta" Pazartesi için "Haftanın ilk günü" ayarı ve "Yılın İlk hafta" tarafından ISO standardı simüle edilebilir.

Her kullanıcı ISO standart takip için bu ayarlamayı yapmak zorunda kalacaktır.

Ben ayrı bir ABD standardı biliyorum, ve, görünüşe göre, ne Outlook yapar.

Orada içeride daha ABD dışında dünyanın daha - ve bunun içinde daha ISO 8601, muhtemelen ABD dışında daha yaygın olarak kullanılmaktadır.

Şimdi bulduk gibi ilk ifadesinde 'Bir yılda 52 hafta var', sadece kısmen doğrudur. Wikipedia belirtildiği gibi ISO hafta açısından, haftada 53 ile sona erebilir. Sen Yıl N haftasında 52 Yıl N +1 kadar üç gün olabilir veya Yıl N. hafta 53 Siz de, Yıl N Hafta 1 Yıl N-1 kadar üç gün olabilir. Zaman Gregoryen takvim yılı ISO hafta-yıl hangi ucunda bağlı olarak yıllık N-1 veya N +1 (olabilir N, çünkü - ve hem ISO 'hafta-yıl' belirlemek de 'hafta' olarak gerek sene) ile çalışıyoruz. Orada ayrı bir biçim belirteçleri ('% Y', '% y', '% g', '% G') strftime(), örneğin (ama POSIX standardı düşünüyor unutmayın bu yüzden o gün önce Ocak ayında ilk Pazartesi günü) cari yıl haftasında 0 olarak değil, haftada 52 veya önceki yıl 53 olan.

'Hafta' için herhangi bir güvenilir 'ABD standart' olarak orada görünmüyor. Kullandığınız yazılıma bağlı olarak farklı sonuçlar elde. Eğer haftanın Oracle tanımına bakarsanız, o yılın ilk yedi gün hafta 1; Eğer yıl sonunda haftada 53 1 ya da 2 gün var.

SO 274861 ISO hafta numarası kodunun uygulanması için ayrıca bkz. Eğer bir dilde kod bile, algoritma kolayca anlaşılabilir olmalıdır.

Uyarı sadece bir kelime, PHP kullanıyorsanız eğer ayrıca MySQL kullanıyor olabilirsiniz. MySQL NOT ISO-8601 hafta kuralları takip etmez ama bunu öyle düşünebilir ki yeterince yakın gelmez. Diğer insanların Outlook hakkında belirterek gibi, hafta numaralarını hesaplama bir sakat standart olmayan bir şekilde taklit çalışıyor buna değer değil!