[PHP] Weeknummer

Pagina: 1
Acties:

  • Guillome
  • Registratie: Januari 2001
  • Niet online
Hoe kan ik het weeknummer opvragen in PHP.
Ik hoorde dat date("W" werkte maar in mijn PHP versie werkt dat niet en ik heb niet de mogelijkheid die te updaten.

Maar ik had zelf dit gedaan
PHP:
1
$weeknr = ceil((date("z", $row['date']) - date("w", $row['date'])) / 7) + 1;


Waarbij $row['date'] gewoon in het date("U") formaat is.
Maar op deze wijze klopt er geen bal van in het jaar 2003 en verder.

Hoe kan ik op een goeie manier de weeknummer opvragen?

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Verwijderd

Zo te zien werkt date("W") alleen in PHP versie boven 4.1.0.
Je zal dan moeten upgraden.
Een andere manier is het tellen van het aantal dagen dat verstreken is sinds 1 januari en dat delen door 7, maar dat lijkt me erg lastig.

[ Voor 0% gewijzigd door Verwijderd op 30-09-2002 14:21 . Reden: Ja = Je ]


  • PieterJ
  • Registratie: Juli 2000
  • Laatst online: 16:04
Verwijderd schreef op 30 september 2002 @ 14:21:
Een andere manier is het tellen van het aantal dagen dat verstreken is sinds 1 januari en dat delen door 7, maar dat lijkt me erg lastig.
Gaat niet werken. Week 1 is de eerste week met meer dan drie dagen in januari. Dus die regel moet je wel meenemen.

Verwijderd

volgens de php-manual van www.php.net werkt strftime(%W) vanaf PHP versie 4.0.0, van date(W) heb ik niet zo snel kunnen achterhalen

Verwijderd

Nog een correctie: Week 1 begint niet altijd op 1 januari.
Bedenk maar: 365 % 7 = 1 (en dan heb je nog niet eens aan schrikkeljaren gedacht).

  • PieterJ
  • Registratie: Juli 2000
  • Laatst online: 16:04
strftime("%W",mktime(0,0,0,$month,$day,$year))
strftime zit ook in versie 3 volgens PHP

  • Guillome
  • Registratie: Januari 2001
  • Niet online
Maar strftime("%W", $row['date']) geeft bij 1 januari week 53 op terwijl dat week 1 moet zijn (van het nieuwe jaar)

Enneh Cyberneer, Gamma!

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Verwijderd

je moet voor uren maar 12 nemen... precies 0:0:0 gaat anders mis idd...

  • Guillome
  • Registratie: Januari 2001
  • Niet online
Wat bedoel je daarmee zellufs??
Ik sla alle datums op 0:00 van een dag, dus mktime(0, 0, 0, maand,dag,jaar)

Maar als ik %V gebruik ipv %w werkt het wel, dus het werkt :D
Bedankt allemaal

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Verwijderd

dan kun je dus beter (als het tijdstip op die dag niets uit maakt) de datum met 12:00 opslaan anders gaat de weekfunctie bijvoorbeeld op bepaalde data over de emmer (zie je eigen bevindingen met 1 januari)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:26

crisp

Devver

Pixelated

Ik heb ooit deze javascript functie ergens gevonden; misschien kan je er wat mee:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function _getWeek() {
 
  year = this.getFullYear();
  month = this.getMonth() + 1;
  day = this.getDate();

  a = Math.floor((14-month) / 12);
  y = year + 4800 - a;
  m = month + 12 * a - 3;
  b = Math.floor(y/4) - Math.floor(y/100) + Math.floor(y/400);
  J = day + Math.floor((153 * m + 2) / 5) + 365 * y + b - 32045;
  d4 = (((J + 31741 - (J % 7)) % 146097) % 36524) % 1461;
  L = Math.floor(d4 / 1460);
  d1 = ((d4 - L) % 365) + L;
  week = Math.floor(d1/7) + 1;
 
  return week;

}
Date.prototype.getWeek = _getWeek;

Intentionally left blank


  • TheDjasp
  • Registratie: Juni 2001
  • Laatst online: 26-06 08:16

TheDjasp

het wordt toch niks

Ik weet niet meer waar ik hem vandaan heb, maar dit is een uitgebreid script om (ISO!!) het weeknummer op te vragen:

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
function weeknummer($timestamp) { 
    $d = getdate($timestamp); 
    $days = iso_week_days($d[ "yday"], $d[ "wday"]); 

    if ($days < 0) { 
        $d[ "yday"] += 365 + is_leap_year(--$d[ "year"]); 
        $days = iso_week_days($d[ "yday"], $d[ "wday"]); 
    } else { 
        $d[ "yday"] -= 365 + is_leap_year($d[ "year"]); 
        $d2 = iso_week_days($d[ "yday"], $d[ "wday"]); 
        if (0 <= $d2) { 
            $days = $d2; 
        } 
    } 
    return (int)($days / 7) + 1; 
} 

function is_leap_year($year) { 
    if ((($year % 4) == 0 and ($year % 100)!=0) or ($year % 400)==0) { 
        return 1;
    } else { 
    return 0;
    } 
}
function iso_week_days($yday, $wday) { 
    return $yday - (($yday - $wday + 382) % 7) + 3; 
}

Omdat het KAN, HOEFT het nog niet!
I haven't been ignoring you; I've been prioritizing you. Hanglooz; "chromeless windows en fullscreen zuigen allebei als een 1600Watt Nilfisk"
logt nu ook


  • Guillome
  • Registratie: Januari 2001
  • Niet online
Euh bedankt allemaal voor de hulp maar nogmaals, het is gelukt met strftime("%V") functie :D

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

Pagina: 1