[PHP] Timestamp van begin van week

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Mafioso
  • Registratie: November 2000
  • Laatst online: 23-09 20:30
Oke, ik heb me al helemaal suf geprobeerd, maar ik kom er maar niet uit. Ik vermoed dat het gewoon niet te doen is :? (tenminste niet zonder heeeel veel gedoe)

Ivm een agenda scriptje wil ik graag het volgende : een functie(tje) die het begin van een week als timestamp returend. De invoer moet dan een weeknummer zijn.

Wat ik heb geprobeerd zijn al een boel dingen. bv door eerst het weeknummer van deze week opvragen:
$week_num_nu = strftime("%W");
en dan door bv mktime of strtotime oid de timestamp van maandag 0:00 van die week te krijgen.

Dat lukt dus niet :\ is het wel mogenlijk op deze manier :?
Of moet ik moeilijk gaan doen door alle weken te gaan tellen van 1-1-1970 0:00 ?

Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
Hmm, even logisch nadenken. Hmm, nee even zoeken op de computer. F*ck niet dus. Toch even nadenken.

Ok we hebben dus een Datum we kunnen achterhalen de hoeveelste dag van de week het is. Vervolgens trekken we van de datum van vandaag het dagnummer af, en dan hebben we toch de eerste dag van de week?

http://www.php.net/manual/en/function.date.php

Hoe het exact is afhankelijk wat jij als begin van de week neemt? Zondag of maandag?

Of zie ik iets over het hoofd ?!?

Acties:
  • 0 Henk 'm!

  • Mafioso
  • Registratie: November 2000
  • Laatst online: 23-09 20:30
Hmm ik vind maandag het begin van de week :)

Maar jou idee is nog niet zo gek nee.. stom dat ik daar niet op ben gekomen, ik wil meteen weer moeilijk doen :)

baggerzooi moet NU gaan werken, zal daarna wel proberen, zal wel lukken ..

Acties:
  • 0 Henk 'm!

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01 11:31

Acties:
  • 0 Henk 'm!

  • mjax
  • Registratie: September 2000
  • Nu online
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function getDateFromWeek($week, $year) {
  $monthDayCount = array(31, 28+isLeapYear($year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

  $dayCount = ($week-(date("w", mktime(0, 0, 0, 1, 1, $year)) > 0 && date("w", mktime(0, 0, 0, 1, 1, $year)) < 5 ? 1 : 0))*7;

  for($iMonth = 0 ; $iMonth < 12 ; $iMonth++) {
    if($dayCount-$monthDayCount[$iMonth] > 0) {
    $dayCount -= $monthDayCount[$iMonth];
    } else {
    break;
    }
  }

  $theDate = mktime(0, 0, 0, $iMonth+1, $dayCount, $year);

  return mktime(0, 0, 0, $iMonth+1, $dayCount-(date("w", $theDate)-1), $year);
}

Eigen functie. Weeknummer en jaar erin, timestamp voor de maandag van die week eruit.

O, ik zie dat ik ook een eigen functie isLeapYear gebruikt hebt. Dus voor de volledigheid die ook even erbij:
code:
1
2
3
function isLeapYear($year) {
  return (($year % 4 == 0 && $year % 100 != 0) || $year % 400 == 0 ? 1 : 0);
}

Acties:
  • 0 Henk 'm!

  • Mafioso
  • Registratie: November 2000
  • Laatst online: 23-09 20:30
Yo thx !!
Daar was ik niet zo 1-2 zelf op gekomen vrees ik :\

Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

Het kan ook een stukje simpeler.
PHP:
1
<?$firstday = date("w", mktime(0, 0, 0, $month, 1, $year));if (!$firstday) $firstday = 7;$firstdisp = date("Ymd", mktime(0, 0, 0, $month, 2-$firstday, $year));?>

Rustacean


Acties:
  • 0 Henk 'm!

  • mjax
  • Registratie: September 2000
  • Nu online
Op woensdag 20 maart 2002 22:14 schreef Manuzhai het volgende:
Het kan ook een stukje simpeler.
PHP:
1
<?$firstday = date("w", mktime(0, 0, 0, $month, 1, $year));if (!$firstday) $firstday = 7;$firstdisp = date("Ymd", mktime(0, 0, 0, $month, 2-$firstday, $year));?>
Het ging hier om het WEEKNUMMER als input, niet om de maand.

Acties:
  • 0 Henk 'm!

  • Mafioso
  • Registratie: November 2000
  • Laatst online: 23-09 20:30
Sorry Manuzhai, dat was idd niet wat ik bedoelde, maar toch bedankt voor je reactie.

Mjax heeel erg bedakt voor de code, het duurde ff voordat ik precies begreep hoe het werkt (maar nu weet ik het dus).

Ik heb hem ietsje aangepast omdat isLeapYear() geen bestaande functie is, en MCAL is niet geinstaleerd hier (oid), anders zou je mcal_is_leap_year kunnen pakken.

Het script zoals ik hem nu gebruik :
PHP:
1
<?function getDateFromWeek($week, $year) {    $monthDayCount = array(31, 28+date("L", mktime(0, 0, 0, 1, 1, $year)), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);    $dayCount = ($week-(date("w", mktime(0, 0, 0, 1, 1, $year)) > 0 &amp;&amp; date("w", mktime(0, 0, 0, 1, 1, $year)) < 5 ? 1 : 0))*7;    for($iMonth = 0 ; $iMonth < 12 ; $iMonth++) {        if($dayCount-$monthDayCount[$iMonth] > 0) {            $dayCount -= $monthDayCount[$iMonth];        } else {            break;        }    }    $theDate = mktime(0, 0, 0, $iMonth+1, $dayCount, $year);    return mktime(0, 0, 0, $iMonth+1, $dayCount-(date("w", $theDate)-1), $year);}?>

Acties:
  • 0 Henk 'm!

  • mjax
  • Registratie: September 2000
  • Nu online
Op donderdag 21 maart 2002 09:28 schreef Mafioso het volgende:
...
Mooi gedaan. Graag gedaan.
Pagina: 1