[php] week/jaar naar datum

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben al een poos aan het zoeken naar een werkende functie die een week en het jaar omzet naar datum. De volgende topics hebben gevonden en ik heb ze allen geprobeerd. Ze doen wel wat maar niet de juiste datum terug geven.

topic 1
topic 2
topic 3
topic 4
topic 5

De gegevens die ik heb zijn het jaar (2005, 2006 enz), de week(1t/m52) en de dag (1t/m7)
dag 1 staat dan voor maandag enz...

dus als ik jaar 2005 heb, week 6, dag 1 zou de uitkomst 7-2-2005 zijn.

de functie zou er dan zo uit moeten komen te zien:

PHP:
1
2
3
4
5
function week2date($jaar, $week, $dag)
{

       return $date;
}


en dan de $date in de vorm date('d m Y')

Zou iemand mij kunnen helpen?

Acties:
  • 0 Henk 'm!

  • rogue
  • Registratie: September 2004
  • Laatst online: 25-07 19:52
als de functies in die eerdere topics niet teruggeven wat jij wil hebben moet je wellicht zelf een functie gaan brouwen; hierover staat veel vermeld, ook bij de comments op de volgende pagina
veel succes

CAPS LOCK IS CRUISE CONTROL FOR COOL


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
function week2date($year, $week, $weekday) {

    for($i=0;$i<7;$i++) {
        if(date('D',mktime (0,0,0,1,1+$i,$year)) == 'Mon') $j=$i;        
    }

    $days = (($week-1)*7)+$weekday+$j;
    $result = mktime (0,0,0,1,$days,$year);
    return date('d m Y',$result);
}

echo week2date(2005,6,1);
?>

Alleen moet je nog zorgen dat-ie het aantal dagen tot de eerste maandag van het jaar bij $days optelt :) Zal eens kijken...

Edit: zo werkt het volgens mij :Y) Ziet er niet echt optimaal uit...

[ Voor 44% gewijzigd door X-Lars op 11-02-2005 12:33 ]


Acties:
  • 0 Henk 'm!

  • WormLord
  • Registratie: September 2003
  • Laatst online: 10:10

WormLord

Devver

Ik zie dat je in Topic 3 al mijn functie gevonden hebt. Deze werkt bij mij precies zoals het hoort. Je moet er wel iets aan veranderen als je een date terug wil krijgen, maar dat is wel heel erg simpel te doen.

Als je er trouwens een probleem in gevonden hebt, dan hoor ik dat graag.

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Ik hem zo geïmplementeerd in mijn agenda (geeft een timestamp):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
 * Weektotimestamp returns a unix timestamp based on a year, week number and day of the week (monday being 1, sunday 
 * being 7)
 * Input:   INT year
 *          INT week
 *          INT day
*/
function weektotimestamp($year, $week, $day)
{

    $firstdate = mktime (0,0,0,01,4, $year); // jan 04 always in week 1
    $firstday = date("w", $firstdate); // fetch day of week of jan 04
    if ($firstday == 0) { $firstday = 7; }
    $offset = ($week-1) * 7 - $firstday + $day; //calc number of days difference from jan 04
    
    return strtotime('+' .$offset .' days', $firstdate);
}


Meer handige datum-functies: agenda functions

edit:
De eerste maandag van het jaar kan ook in week 2 liggen. Week 1 is altijd de week waarin minimaal 4 dagen in het nieuwe jaar liggen. Als 1 januari op woensdag of donderdag valt is dit het geval. De enige echte zekerheid die je hebt is 4 januari --> altijd week 1.

[ Voor 23% gewijzigd door T-MOB op 11-02-2005 12:59 ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
X-Lars schreef op vrijdag 11 februari 2005 @ 12:21:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
function week2date($year, $week, $weekday) {

    for($i=0;$i<7;$i++) {
        if(date('D',mktime (0,0,0,1,1+$i,$year)) == 'Mon') $j=$i;        
    }

    $days = (($week-1)*7)+$weekday+$j;
    $result = mktime (0,0,0,1,$days,$year);
    return date('d m Y',$result);
}

echo week2date(2005,6,1);
?>

Alleen moet je nog zorgen dat-ie het aantal dagen tot de eerste maandag van het jaar bij $days optelt :) Zal eens kijken...

Edit: zo werkt het volgens mij :Y) Ziet er niet echt optimaal uit...
tnx het werkt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
WormLord schreef op vrijdag 11 februari 2005 @ 12:39:
Ik zie dat je in Topic 3 al mijn functie gevonden hebt. Deze werkt bij mij precies zoals het hoort. Je moet er wel iets aan veranderen als je een date terug wil krijgen, maar dat is wel heel erg simpel te doen.

Als je er trouwens een probleem in gevonden hebt, dan hoor ik dat graag.
Het probleem was dat jij de dag 1-31 of welke maand het ook is gebruikt, maar ik met dag maandag, dinsdag, woensdag enz.. bedoel. En hij kent de functie dayofweek niet in jou script.

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Maar hij faalt de eerste maandag van het jaar in week 2 ligt, zie de edit in mijn post hierboven...

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

T-MOB schreef op vrijdag 11 februari 2005 @ 12:44:

[...]

De eerste maandag van het jaar kan ook in week 2 liggen. Week 1 is altijd de week waarin minimaal 4 dagen in het nieuwe jaar liggen. Als 1 januari op woensdag of donderdag valt is dit het geval. De enige echte zekerheid die je hebt is 4 januari --> altijd week 1.
Daar had ik inderdaad geen rekening mee gehouden. Jouw functie is dan natuurlijk beter.

Acties:
  • 0 Henk 'm!

  • WormLord
  • Registratie: September 2003
  • Laatst online: 10:10

WormLord

Devver

Verwijderd schreef op vrijdag 11 februari 2005 @ 13:02:
[...]


Het probleem was dat jij de dag 1-31 of welke maand het ook is gebruikt, maar ik met dag maandag, dinsdag, woensdag enz.. bedoel. En hij kent de functie dayofweek niet in jou script.
De dag in mijn functie is ook dag van de week (1 (maandag) - 7 (zondag)).
De functie dayofweek is er inderdaad ook een die ik zelf geschreven heb. Was ik even vergeten |:( . Is ook al weer een tijdje geleden dat ik me daarmee bezig heb gehouden.
Pagina: 1