Datum uit weeknummers
Pagina: « vorige 1 2 3 volgende »
Geinig hoe jullie dit oplossen :-)
lissy:
Yeppers die van jou SanThe werkt als een tierelier :-)
Geinig hoe jullie dit oplossen :-)
Geinig hoe jullie dit oplossen :-)
Vergeet Willem vp niet. Die heeft het gemaakt, ik heb er slechts kleine foutjes uitgehaald.
Gewoon toppies :-)))))))
SanThe:
Mooi, maar dat van mij dus ook.
Het script is een stuk verbeterd. Maar nog niet perfect. Als ik nu week 53 van 2002 opvraag, geeft jouw script 30-12-2002 en 05-01-2003 en mijn (nou ja) script geeft Het jaar 2002 heeft geen week 53. En dat klopt want wat jij geeft is week 1 van 2003.
Jan:
Het bloed kruipt toch waar het niet gaan kan:
Mooi, maar dat van mij dus ook.
Het script is een stuk verbeterd. Maar nog niet perfect. Als ik nu week 53 van 2002 opvraag, geeft jouw script 30-12-2002 en 05-01-2003 en mijn (nou ja) script geeft Het jaar 2002 heeft geen week 53. En dat klopt want wat jij geeft is week 1 van 2003.
Ik zit nu op mijn werk, maar een checkinbouwen of week 53 wel een donderdag heeft moet kunnen.
Jan:
Ik zit nu op mijn werk, maar een checkinbouwen of week 53 wel een donderdag heeft moet kunnen.
De donderdag van die week valt inderdaad in het volgend jaar. Succes. (Ik geef je toch niet teveel werk hoop ik) :-)
@ SanThe: nee hoor, het gaat me in dit geval puur om de sport.
Wauw leuk dat jullie me mee helpen! Leuke oplossingen hebben jullie! =) Ik wacht met smart op Jan =)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
function ISOdates_from_weeknr ($weeknr, $year, $format = '%d-%m-%Y') {
$start = strtotime ('1 january ' . $year);
$week1 = strftime ('%V', $start);
$weeknr--;
while ($week1 != '01' && $weeknr > 52) {
$start += (7 * 24 * 3600);
$week1 = strftime ('%V', $start);
}
$timestamp_week = strtotime ('+' . $weeknr . ' week', $start);
$check = strftime ('%V', $timestamp_week);
if ($check == '01') {
echo 'ongeldig weeknummer voor dit jaar' . "\n";
return false;
}
$weekdag = strftime ('%u', $timestamp_week);
$dagen_tot_begin_week = $weekdag - 1;
$dagen_tot_eind_week = 7 - $weekdag;
$begindatum = strtotime ("-" . $dagen_tot_begin_week . " days", $timestamp_week);
$einddatum = strtotime ("+" . $dagen_tot_eind_week . " days", $timestamp_week);
$begindatum;
return array (strftime ($format, $begindatum), strftime ($format, $einddatum));
}
?>
function ISOdates_from_weeknr ($weeknr, $year, $format = '%d-%m-%Y') {
$start = strtotime ('1 january ' . $year);
$week1 = strftime ('%V', $start);
$weeknr--;
while ($week1 != '01' && $weeknr > 52) {
$start += (7 * 24 * 3600);
$week1 = strftime ('%V', $start);
}
$timestamp_week = strtotime ('+' . $weeknr . ' week', $start);
$check = strftime ('%V', $timestamp_week);
if ($check == '01') {
echo 'ongeldig weeknummer voor dit jaar' . "\n";
return false;
}
$weekdag = strftime ('%u', $timestamp_week);
$dagen_tot_begin_week = $weekdag - 1;
$dagen_tot_eind_week = 7 - $weekdag;
$begindatum = strtotime ("-" . $dagen_tot_begin_week . " days", $timestamp_week);
$einddatum = strtotime ("+" . $dagen_tot_eind_week . " days", $timestamp_week);
$begindatum;
return array (strftime ($format, $begindatum), strftime ($format, $einddatum));
}
?>
Gewijzigd op 09/01/2006 18:58:00 door Jan Koehoorn
Week 53 in 2002 bestaat niet en bij jou wel. Week 1 in 2003 bestaat wel en bij jou niet.
Veel succes.;-)
Het is hier onder voorbeelden te zien.
Edit: Volgens mij bestaat week 1 bij jou helemaal nooit meer.
Gewijzigd op 09/01/2006 18:59:00 door - SanThe -
Ja, die had ik al gezien, is inmiddels hersteld. Straks als ik thuis ben ga ik eens rustig kijken.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
function ISOdates_from_weeknr ($weeknr, $year, $format = '%d-%m-%Y') {
$start = strtotime ('1 january ' . $year);
$week1 = strftime ('%V', $start);
while ($week1 != '01') {
$start += (7 * 24 * 3600);
$week1 = strftime ('%V', $start);
}
$timestamp_week = strtotime ('+' . ($weeknr - 1) . ' week', $start);
$check = strftime ('%V', $timestamp_week);
if ($check == '01' && $weeknr > 52) {
echo 'ongeldig weeknummer voor dit jaar' . "\n";
return false;
}
$weekdag = strftime ('%u', $timestamp_week);
$dagen_tot_begin_week = $weekdag - 1;
$dagen_tot_eind_week = 7 - $weekdag;
$begindatum = strtotime ("-" . $dagen_tot_begin_week . " days", $timestamp_week);
$einddatum = strtotime ("+" . $dagen_tot_eind_week . " days", $timestamp_week);
$begindatum;
return array (strftime ($format, $begindatum), strftime ($format, $einddatum));
}
?>
function ISOdates_from_weeknr ($weeknr, $year, $format = '%d-%m-%Y') {
$start = strtotime ('1 january ' . $year);
$week1 = strftime ('%V', $start);
while ($week1 != '01') {
$start += (7 * 24 * 3600);
$week1 = strftime ('%V', $start);
}
$timestamp_week = strtotime ('+' . ($weeknr - 1) . ' week', $start);
$check = strftime ('%V', $timestamp_week);
if ($check == '01' && $weeknr > 52) {
echo 'ongeldig weeknummer voor dit jaar' . "\n";
return false;
}
$weekdag = strftime ('%u', $timestamp_week);
$dagen_tot_begin_week = $weekdag - 1;
$dagen_tot_eind_week = 7 - $weekdag;
$begindatum = strtotime ("-" . $dagen_tot_begin_week . " days", $timestamp_week);
$einddatum = strtotime ("+" . $dagen_tot_eind_week . " days", $timestamp_week);
$begindatum;
return array (strftime ($format, $begindatum), strftime ($format, $einddatum));
}
?>
Gewijzigd op 09/01/2006 19:29:00 door Jan Koehoorn
Week 1 doet het weer maar de week 53 fout is weer terug. Om het te bekijken zie bovenstaande link.
Wat is de fout dan nu nog? Ik zie geen fouten in het script, week 1 pakt hij toch?
Het script van Jan geeft soms nog een verkeerd antwoord op week 53 die niet altijd bestaat.
Week 53 bestaat toch nooit, hij geeft als week 52 deels in het nieuwe jaar loopt het toch goed terug?
mijn testopstelling krijg ik dezelfde uitkomsten als met jullie functie.
Heel gek. In Jan:
Heel gek. In mijn testopstelling krijg ik dezelfde uitkomsten als met jullie functie.
Post je 'niet gewijzigde' maar 'toch werkende' script eens dan zet ik het even op mijn site. :-)
Ik heb gemerkt dat ie vaak wel correct is maar niet altijd.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
function ISOdates_from_weeknr ($weeknr, $year, $format = '%d-%m-%Y') {
$start = strtotime ('1 january ' . $year);
$week1 = strftime ('%V', $start);
while ($week1 != '01') {
$start += (7 * 24 * 3600);
$week1 = strftime ('%V', $start);
}
$timestamp_week = strtotime ('+' . ($weeknr - 1) . ' week', $start);
$check = strftime ('%V', $timestamp_week);
if ($check == '01' && $weeknr > 52) {
echo 'ongeldig weeknummer voor dit jaar' . "\n";
return false;
}
$weekdag = strftime ('%u', $timestamp_week);
$dagen_tot_begin_week = $weekdag - 1;
$dagen_tot_eind_week = 7 - $weekdag;
$begindatum = strtotime ("-" . $dagen_tot_begin_week . " days", $timestamp_week);
$einddatum = strtotime ("+" . $dagen_tot_eind_week . " days", $timestamp_week);
$begindatum;
return array (strftime ($format, $begindatum), strftime ($format, $einddatum));
}
echo '<pre>';
for ($i = 2000; $i < 2005; $i++) {
echo $i . "\n";
echo '<p>1</p>';
print_r (ISOdates_from_weeknr (1, $i));
echo '<p>53</p>';
print_r (ISOdates_from_weeknr (53, $i));
echo '<hr>';
}
echo '</pre>';
?>
function ISOdates_from_weeknr ($weeknr, $year, $format = '%d-%m-%Y') {
$start = strtotime ('1 january ' . $year);
$week1 = strftime ('%V', $start);
while ($week1 != '01') {
$start += (7 * 24 * 3600);
$week1 = strftime ('%V', $start);
}
$timestamp_week = strtotime ('+' . ($weeknr - 1) . ' week', $start);
$check = strftime ('%V', $timestamp_week);
if ($check == '01' && $weeknr > 52) {
echo 'ongeldig weeknummer voor dit jaar' . "\n";
return false;
}
$weekdag = strftime ('%u', $timestamp_week);
$dagen_tot_begin_week = $weekdag - 1;
$dagen_tot_eind_week = 7 - $weekdag;
$begindatum = strtotime ("-" . $dagen_tot_begin_week . " days", $timestamp_week);
$einddatum = strtotime ("+" . $dagen_tot_eind_week . " days", $timestamp_week);
$begindatum;
return array (strftime ($format, $begindatum), strftime ($format, $einddatum));
}
echo '<pre>';
for ($i = 2000; $i < 2005; $i++) {
echo $i . "\n";
echo '<p>1</p>';
print_r (ISOdates_from_weeknr (1, $i));
echo '<p>53</p>';
print_r (ISOdates_from_weeknr (53, $i));
echo '<hr>';
}
echo '</pre>';
?>