[PHP] weekdata laten zien

Pagina: 1
Acties:
  • 484 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • burrug
  • Registratie: April 2005
  • Laatst online: 14-10-2024
Hallo,
Ik ben zelf een agenda aan het schrijven, dut lukt me aardig moet ik zeggen :)
Nu heb ik een pagina waarin de data per maand worden weergegeven, dit werkt ook prima. Nu wil ik dat de gebruiker ook een pagina kan openen waarmee hij data per week kan bekijken. Ik weet zelf niet echt hoe ik dit aan kan pakken...
Kan iemand mij hiermee helpen?
Ik heb dit nu al:
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
 
<?php 
$now = getdate(time()); 
$time = mktime(0,0,0, $_GET['maand'], 1, $_GET['jaar']); 
$date = getdate($time); 
$dayTotal = cal_days_in_month(0, $date['mon'], $date['year']); 

print '<table border="1" style="border-collapse:collapse;" align="center">'; 
        for ($i = 0; $i < 6; $i++) { 
        print '<tr >'; 
            $dayNum = $j + $i - $date['wday']; 
            //Print a cell with the day number in it.  If it is today, highlight it. 
            print '<td border="1"  align="left" valign="top" width="100" height="100"'; 
            if ($dayNum > 0 && $dayNum <= $dayTotal) { 
                if ($dayNum == $now['mday'] && $_GET['maand'] == $now['mon'] && $_GET['jaar'] == $now['year']) {                                      
                                        print ' bgcolor="lightblue">'; 
                } else { 
                    print ' >'; 
                } 
                print '<h3>'.$dayNum.'</h3>'; 
            } 
            print '</td>'; 
        
        print '</tr>'; 
        if ($dayNum >= $dayTotal && $i != 6) 
            break; 
    } 
    print '</table>'; 
?> 

Hiermee krijg ik de volgende output:

Een zestal enkelcellige tablerows onder elkaar, waarvan de bovenste leeg is, en de onderste 5 genummerd zijn van 1 tot 5.
Met andere woorden, hoe kom ik erachter welke data in elk weeknummer voorkomen?

Tannoy Revolution R3 105W 6ohm, Marantz PM-7003 2x70W 8ohm, 2x JVG goud/goud, Marantz CD-6003, Marantz ST-6003


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Staat in de manual.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • burrug
  • Registratie: April 2005
  • Laatst online: 14-10-2024
Ja daar heb ik dus al gekeken, maar ik kom er niet echt uit.. :)

Ik neem aan dat je de custom-functie week_limits(); bedoelt;
PHP:
1
2
3
4
5
6
7
8
9
10
function week_limits($weekNumber, $year, $pattern)
{
    $pattern = ($pattern) ? $pattern : "m/d";
    $stday = 7 * $weekNumber - 7;
    $stDayNumber = date("w", mktime(0,0,0,1, 1+$stday, $year));
    $stUtime = mktime(0,0,0,1,1+$stday-$stDayNumber, $year);
    $start_time = date($pattern, $stUtime);
    $end_time = date($pattern, $stUtime+6*24*60*60);
   return array($start_time, $end_time);
}


Daar krijg ik dus als output met print_r(week_limits(17,2007)); :

Array ( [0] => 1145232061 [1] => 1145750461 )

En ik weet dus niet echt wat ik daar mee aanmoet..

Tannoy Revolution R3 105W 6ohm, Marantz PM-7003 2x70W 8ohm, 2x JVG goud/goud, Marantz CD-6003, Marantz ST-6003


Acties:
  • 0 Henk 'm!

  • André
  • Registratie: Maart 2002
  • Laatst online: 12-09 14:32

André

Analytics dude

Move naar Programming

Acties:
  • 0 Henk 'm!

  • IntToStr
  • Registratie: December 2003
  • Laatst online: 21:06
burrug schreef op vrijdag 27 april 2007 @ 09:57:
...

Daar krijg ik dus als output met print_r(week_limits(17,2007)); :

Array ( [0] => 1145232061 [1] => 1145750461 )

En ik weet dus niet echt wat ik daar mee aanmoet..
Dit zijn timestamps. Die kun je heel eenvoudig converteren naar data met een functie als strftime (of iets wat hier op lijkt :), zie anders php.net)

Toevoeging: tussenliggende data kun je eenvoudig genereren door het aantal secondes in een dag op te tellen bij de start_date.

[ Voor 13% gewijzigd door IntToStr op 27-04-2007 10:34 ]


Acties:
  • 0 Henk 'm!

  • sam.vimes
  • Registratie: Januari 2007
  • Laatst online: 08-06 08:44
burrug schreef op vrijdag 27 april 2007 @ 09:57:
Daar krijg ik dus als output met print_r(week_limits(17,2007)); :

Array ( [0] => 1145232061 [1] => 1145750461 )

En ik weet dus niet echt wat ik daar mee aanmoet..
Array[0] en Array[1] zijn de unix-timestamps van respectievelijk Mon Apr 17 02:01:01 2006 en Sun Apr 23 02:01:01 2006, dus van het begin en eind van week 16 van het jaar 2006. De timestamps kun je weer voeren als tweede parameter van de date() functie.

Edit: de afwijking van 2 uur komt door de conversie naar middeneuropese zomertijd.

[ Voor 7% gewijzigd door sam.vimes op 27-04-2007 10:42 ]


Acties:
  • 0 Henk 'm!

  • burrug
  • Registratie: April 2005
  • Laatst online: 14-10-2024
Ik heb nu dit:
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
38
39
40
41
42
43
44
45
46
47
48
49
function week_limits($weekNumber, $year) {
            // begin datetime
            $time = mktime(1, 1, 1, 1, 1, $year);            
            // Aassuring that $weekNumber is number
            $weekNumber;
            // If first week of year starts not from monday, date() will return "not correct" result (in this case first week is 0)
            if (date('w', $time) == 1)
                $weekNumber;
            $start_time = false;
            $end_time = false;
            for ($day = 1; $day <= 365; $day++)
            {
                if (date('W', $time) == $weekNumber && !$start_time)
                    $start_time = $time;
                if (date('W', $time - 24*60*60) == $weekNumber && !$end_time && date('W', $time) != $weekNumber)
                    $end_time = $time - 24*60*60;               
                if ($start_time && $end_time)
                    break;     
                $time += 24*60*60;
            }
            return array($start_time, $end_time);
}
    $now = getdate(time());
    $time = mktime(0,0,0, $_GET['maand'], 1, $_GET['jaar']);
    $date = getdate($time);
    
    //Print the calendar header with the month name.
    $startdate = week_limits($_GET['week'],$_GET['jaar']);
    $startdatum = strftime("%d",$startdate[0]) - 1;
    $einddatum = strftime("%d",$startdate[1]) - 1;

print '<table border="1" style="border-collapse:collapse;" align="center">';
        for ($i = $startdatum; $i <= $einddatum; $i++) {
        print '<tr >';
            //Print a cell with the day number in it.  If it is today, highlight it.
            print '<td border="1"  align="left" valign="top" width="700" height="100"';
                if ($i == $now['mday'] && $_GET['jaar'] == $now['year']) { 
print ' onMouseOver="this.style.color=\'#FFFFFF\';this.bgColor=\'#FF8A8A\';" onMouseOut="this.bgColor=\'lightblue\';this.style.color=\'#111111\';" bgcolor="lightblue">'; 
                } else {
                    print ' onMouseOver="this.style.color=\'#FFFFFF\';this.bgColor=\'#FF8A8A\';" onMouseOut="this.bgColor=\'#ffffff\';this.style.color=\'#111111\';">';
                }
                print '<h3>'.$i.'</h3>';
            
            print '</td>';
        
        print '</tr>';
    
    } 
    print '</table>';


Het probleem is nu, dat wanneer hij een week moet laten zien, welke verdeeld is in 2 maanden, dat hij totaal de table niet laat zien... mis ik nog een stukje of doe ik nog iets verkeerd?

Tannoy Revolution R3 105W 6ohm, Marantz PM-7003 2x70W 8ohm, 2x JVG goud/goud, Marantz CD-6003, Marantz ST-6003


Acties:
  • 0 Henk 'm!

  • Tsunami
  • Registratie: Juni 2002
  • Niet online
offtopic:
Hey, dit topic zag ik net ook op PHPFreakz :')

Acties:
  • 0 Henk 'm!

  • burrug
  • Registratie: April 2005
  • Laatst online: 14-10-2024
Tja, als je snel resultaat wilt.. :) hij staat ook op phphulp.nl..
Maar weer even ontopic.. :D

Tannoy Revolution R3 105W 6ohm, Marantz PM-7003 2x70W 8ohm, 2x JVG goud/goud, Marantz CD-6003, Marantz ST-6003


Acties:
  • 0 Henk 'm!

  • burrug
  • Registratie: April 2005
  • Laatst online: 14-10-2024
ah ik zie het al..


<?
for ($i = $startdatum; $i <= $einddatum; $i++) {
?>


Als die startdatum nu de 30e is, en de eindatum de 6 is, laat hij niks zien.. :) even stuntelen met een ifje..

edit:

ehm... shit hoe moet ik oplossen..? kan iemand mij hiermee helpen?

[ Voor 16% gewijzigd door burrug op 27-04-2007 11:23 ]

Tannoy Revolution R3 105W 6ohm, Marantz PM-7003 2x70W 8ohm, 2x JVG goud/goud, Marantz CD-6003, Marantz ST-6003


Acties:
  • 0 Henk 'm!

  • IntToStr
  • Registratie: December 2003
  • Laatst online: 21:06
Nog een keer dan:
IntToStr schreef op vrijdag 27 april 2007 @ 10:32:
[...]

Dit zijn timestamps. Die kun je heel eenvoudig converteren naar data met een functie als strftime (of iets wat hier op lijkt :), zie anders php.net)

Toevoeging: tussenliggende data kun je eenvoudig genereren door het aantal secondes in een dag op te tellen bij de start_date.

Acties:
  • 0 Henk 'm!

  • burrug
  • Registratie: April 2005
  • Laatst online: 14-10-2024
Ja dat begreep ik al.. :)
ik heb nu dit en het werkt perfect!
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
    $now = getdate(time());
    $time = mktime(0,0,0, $_GET['maand'], 1, $_GET['jaar']);
    $date = getdate($time);
    
    //Print the calendar header with the month name.
    $startdate = week_limits($_GET['week'],$_GET['jaar']);
    $startdatum = strftime("%d",$startdate[0]) - 1;
    $einddatum = strftime("%d",$startdate[1]) - 1;
    $maandnr = strftime("%m",$startdate[0]);
    $totaalmaand = cal_days_in_month(CAL_GREGORIAN, $maandnr, $_GET['jaar']); 

    
    print '<table border="1" style="border-collapse:collapse;" align="center">';
    if ($startdatum > $einddatum) {
        for ($i = $startdatum; $i <= $totaalmaand; $i++) {
        print '<tr >';
            //Print a cell with the day number in it.  If it is today, highlight it.
            print '<td border="1"  align="left" valign="top" width="700" height="100"';
                if ($i == $now['mday'] && $_GET['jaar'] == $now['year']) { print ' onMouseOver="this.style.color=\'#FFFFFF\';this.bgColor=\'#FF8A8A\';" onMouseOut="this.bgColor=\'lightblue\';this.style.color=\'#111111\';" bgcolor="lightblue">'; 
                } else {
                    print ' onMouseOver="this.style.color=\'#FFFFFF\';this.bgColor=\'#FF8A8A\';" onMouseOut="this.bgColor=\'#ffffff\';this.style.color=\'#111111\';">';
                }
                print '<h3>'.$i.'</h3>';
            
            print '</td>';
        
        print '</tr>';
        }
        for ($i = 1; $i <= $einddatum; $i++) {
            print '<tr >';
            //Print a cell with the day number in it.  If it is today, highlight it.
            print '<td border="1"  align="left" valign="top" width="700" height="100"';
                if ($i == $now['mday'] && $_GET['jaar'] == $now['year']) { print ' onMouseOver="this.style.color=\'#FFFFFF\';this.bgColor=\'#FF8A8A\';" onMouseOut="this.bgColor=\'lightblue\';this.style.color=\'#111111\';" bgcolor="lightblue">'; 
                } else {
                    print ' onMouseOver="this.style.color=\'#FFFFFF\';this.bgColor=\'#FF8A8A\';" onMouseOut="this.bgColor=\'#ffffff\';this.style.color=\'#111111\';">';
                }
                print '<h3>'.$i.'</h3>';
            
            print '</td>';
        
        print '</tr>';
            }
    } else {
        for ($i = $startdatum; $i <= $einddatum; $i++) {
        print '<tr >';
            //Print a cell with the day number in it.  If it is today, highlight it.
            print '<td border="1"  align="left" valign="top" width="700" height="100"';
                if ($i == $now['mday'] && $_GET['jaar'] == $now['year']) { print ' onMouseOver="this.style.color=\'#FFFFFF\';this.bgColor=\'#FF8A8A\';" onMouseOut="this.bgColor=\'lightblue\';this.style.color=\'#111111\';" bgcolor="lightblue">'; 
                } else {
                    print ' onMouseOver="this.style.color=\'#FFFFFF\';this.bgColor=\'#FF8A8A\';" onMouseOut="this.bgColor=\'#ffffff\';this.style.color=\'#111111\';">';
                }
                print '<h3>'.$i.'</h3>';
            
            print '</td>';
        
        print '</tr>';
    
    }
    } 
    print '</table>';


bedankt voor alle hulp!

Tannoy Revolution R3 105W 6ohm, Marantz PM-7003 2x70W 8ohm, 2x JVG goud/goud, Marantz CD-6003, Marantz ST-6003


Acties:
  • 0 Henk 'm!

Verwijderd

Waaaa dubbele code!
Maak van wat je tussen de ifjes doet, een nieuwe functie en roep die overal aan. Wel zo net :)

[ Voor 71% gewijzigd door Verwijderd op 27-04-2007 12:22 ]

Pagina: 1