ugrás a tartalomhoz

date ('W') probléma

korbendallas · 2006. Május. 1. (H), 12.32
Sziasztok,
A date('W') segítségével a hét sorszámát tudhatjuk meg elvileg (az 1. hét az első hétfővel kezdődő hét).
Viszont az alábbi kódra elég érdekes eredményt kapok:

for ($i=2000; $i<2015; $i++) {
  echo $i . ".01.01 =" . (date( "Y", mktime( 0, 0, 0, 1, 1, $i))) . "." . (date( "W", mktime( 0, 0, 0, 1, 1, $i))) . ". hét *** ";
  echo $i . ".12.31 =" . (date( "Y", mktime( 0, 0, 0, 12, 31, $i))) . "." . (date( "W", mktime( 0, 0, 0, 12, 31, $i))) . ". hét<br>";
}
Mégpedig ezt:
2000.01.01 =2000.52. hét *** 2000.12.31 =2000.52. hét
2001.01.01 =2001.01. hét *** 2001.12.31 =2001.01. hét
2002.01.01 =2002.01. hét *** 2002.12.31 =2002.01. hét
2003.01.01 =2003.01. hét *** 2003.12.31 =2003.01. hét
2004.01.01 =2004.01. hét *** 2004.12.31 =2004.53. hét
2005.01.01 =2005.53. hét *** 2005.12.31 =2005.52. hét
2006.01.01 =2006.52. hét *** 2006.12.31 =2006.52. hét
2007.01.01 =2007.01. hét *** 2007.12.31 =2007.01. hét
2008.01.01 =2008.01. hét *** 2008.12.31 =2008.01. hét
2009.01.01 =2009.01. hét *** 2009.12.31 =2009.53. hét
2010.01.01 =2010.53. hét *** 2010.12.31 =2010.52. hét
2011.01.01 =2011.52. hét *** 2011.12.31 =2011.52. hét
2012.01.01 =2012.52. hét *** 2012.12.31 =2012.01. hét
2013.01.01 =2013.01. hét *** 2013.12.31 =2013.01. hét
2014.01.01 =2014.01. hét *** 2014.12.31 =2014.01. hét

Találkoztatok már ezzel? Ez most bug vagy feature?
PHP Version 5.0.5-Debian-0.8~sarge1 (Debian GNU/Linux)
 
1

hopsz elrontottam

korbendallas · 2006. Május. 1. (H), 12.46
A
(date( "Y", mktime( 0, 0, 0, 1, 1, $i)))
nem kell bele, de a lényegen nem változtat végülis.
Szóval, hogy lehet december 31.-ét tartalmazó hét az első hét egy évben?
Illetve, ha január 1. nem hétfőre esik, akkor annak logikusan 52. v 53. hétnek kell lennie, de nem így van...
5

első hét

Balogh Tibor · 2006. Május. 2. (K), 13.20
"az 1. hét az első hétfővel kezdődő hét..."

Mintha rémlene, hogy az az 1. hét amikor szerda utáni napra esik elseje.

Szerda ablakában csütörtök ül,
és ordít csütörtökül.
6

hopsz

Balogh Tibor · 2006. Május. 2. (K), 13.23
Na majd legközelebb frissítem a lapot...
2

ez a szabvány

ftl · 2006. Május. 1. (H), 13.10
iso 8601-ben van meghatározva, hogy a decemberben kezdődő és januárban végződő hét ahhoz az évhez tartozik, amelyikben több napja van, vagyis 4 vagy több. másképp fogalmazva: a hét ahhoz az évhez tartozik, amelyik évre a csütörtök esik.
vannak egyébként másfajta szabályok is.
lásd még: http://en.wikipedia.org/wiki/Week#Week_number, http://en.wikipedia.org/wiki/ISO_8601#Week_dates
3

ISO-8601

Anonymous · 2006. Május. 1. (H), 13.21
A PHP date() függvénye az ISO-8601 szabvány szerint számolja a naptárat.
Az új év első csütörtökjét tartalmazó hét az év első hete. (tehát az új évből minimum 4 napot kell tartalmaznia az első 7nek).

Hétfő = 1
Kedd = 2
Szerda = 3
Csütörtök = 4
Péntek = 5
Szombat = 6
Vasárnap = 7

Eszerint:
2000.01.01 = 6 -> 52.hét (2 nap az új évben)
2001.01.01 = 1 -> 01.hét (7 nap az új évben)
2002.01.01 = 2 -> 01.hét (6 nap az új évben)
2003.01.01 = 3 -> 01.hét (5 nap az új évben)
2004.01.01 = 4 -> 01.hét (4 nap az új évben)
2005.01.01 = 6 -> 52.hét (2 nap az új évben)
2006.01.01 = 7 -> 52.hét (1 nap az új évben)
2007.01.01 = 1 -> 01.hét (7 nap az új évben)


Remélem tudtam segíteni
4

Köszi

korbendallas · 2006. Május. 1. (H), 15.02
Köszönöm a fenti linket, ill. a magyarázatot, a php.net-en levő leírást félreértettem.