[PHP & Smarty] Weird probleem in kalender op 30 oktober 2005

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb de volgende "smarty-code"

code:
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
<table class="agenda" cellpadding="0" cellspacing="0" width="100%">
<tr class="agenda_dagnamen">
    <td>&nbsp;</td>
    <td>Ma</td>
    <td>Di</td>
    <td>Wo</td>
    <td>Do</td>
    <td>Vr</td>
    <td>Za</td>
    <td>Zo</td>
</tr>
{# section name=dagloop start=$agenda_begindatum_timestamp loop=$agenda_einddatum_timestamp step=86400 #}
    {# if $smarty.section.dagloop.index|date_format:"%w" == 1 #}
    <tr valign="top" class="{# cycle values="agenda_row_odd,agenda_row_even" #}">
        <td class="agenda_weeknummer">
            <table cellpadding="0" cellspacing="0" border="0" width="100%" class="tekstmain11px">
            <tr>
                <td align="center">{# $smarty.section.dagloop.index|date_format:"%W" #}</td>
            </tr>
            <tr>
                <td align="center"></td>
            </tr>
            <tr>
                <td align="center"></td>
            </tr>
            </table>
    {#/if#}

        <td align="center" height="15">{# $smarty.section.dagloop.index|date_format:"%d" #}-{#$smarty.section.dagloop.index|date_format:"%w"#}<br />{#$smarty.section.dagloop.index#}</td>

    {#if $smarty.section.dagloop.index|date_format:"%w" == 0 #}
    </tr>
    {# /if #}
    
{# /section #}
</table>


Ik verhoog de section telkens met 86400 seconden dus een dag. Op deze manier kan ik heel mooi een kalendertje weergeven met als eerste rij de dagnummers en als eerste kolom de weeknummers. De enige input die het nodig heeft is een unix timestamp begindatum en einddatum.

Als het dagnummer gelijk is aan 0, dan is het zondag en sluit ik de rij af met een </tr> Dit gaat overal goed behalve bij 30 oktober 2005

Hier gebeurd het volgende:
29 oktober
dagnummer 6
timestamp 1130536800

30 oktober
dagnummer 0
timestamp 1130623200

nu volgt een tr omdat het dagnummer 0 is

30 oktober (????)
dagnummer 0 (????)
timestamp 1130709600

Hij zet hier dus geen weeknummer voor omdat het dagnummer 0 is. timestamp wordt wel met een dag verhoogt.

Nu volgt weer een tr omdat het dagnummer 0 is.

Weeknummer 44

31oktober
dagnummer 1
timestamp 1130796000

En dan gaat hij gewoon goed verder.

Zoals je ziet hebben 30 en 31 oktober dezelfde timestamp. Vaag niet? Dit is ook de enige datum waar dit verkeerd gaat. Is hier wat raars aan de hand? Bug in PHP? Of afrondingsfout met seconden?
Ik hoop dat iemand licht in deze vage materie kan brengen.

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Ik vermoed dat het te maken heeft met de wintertijd die op deze dag is ingegaan. 30 oktober duurde een uur langer dan alle andere dagen in het jaar. Ergo je stepping voor deze dag is niet correct. Dit is op te lossen door als aanduiding van de dag 12.00 's middags ofzo te gebruiken. In de winter check je dan feitelijk op 11:00 wat alsnog correcte datums en weeknummers genereert :)

edit:
Nog even edit, het hierboven voorgestelde truukje door de timestamp op het midden van de dag te plaatsen is eigenlijk een workaround omdat ik verder niet bekend ben met smarty. Wil je het correct doen in PHP dan gebruik je strtotime(+1 day, $timestamp). Die functie houdt van zichzelf rekening met zomer en wintertijd :)

[ Voor 36% gewijzigd door T-MOB op 11-11-2005 11:55 ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
verrek, dat zou nog wel eens kunnen. Ik ga het checken.

Acties:
  • 0 Henk 'm!

  • Thunderboy446
  • Registratie: November 2001
  • Laatst online: 09-12-2015
Ik heb gehoord dat ze wintertijd en zomertijd willen afschaffen

Heb je iig niet meer dit soort problemen

Acties:
  • 0 Henk 'm!

Verwijderd

Volgens mij willen ze de winter/ zomer tijd niet afschaffen, maar de zogenaamde schrikkel seconde

Acties:
  • 0 Henk 'm!

  • DirkT
  • Registratie: Juli 2002
  • Niet online

DirkT

toet

Verwijderd schreef op vrijdag 11 november 2005 @ 11:08:
Ik heb de volgende "smarty-code"

[#some-code]


nu volgt een tr omdat het dagnummer 0 is

30 oktober (????)
dagnummer 0 (????)
timestamp 1130709600

Hij zet hier dus geen weeknummer voor omdat het dagnummer 0 is. timestamp wordt wel met een dag verhoogt.

Nu volgt weer een tr omdat het dagnummer 0 is.

Weeknummer 44

31oktober
dagnummer 1
timestamp 1130796000

En dan gaat hij gewoon goed verder.

Zoals je ziet hebben 30 en 31 oktober dezelfde timestamp. Vaag niet? Dit is ook de enige datum waar dit verkeerd gaat. Is hier wat raars aan de hand? Bug in PHP? Of afrondingsfout met seconden?
Ik hoop dat iemand licht in deze vage materie kan brengen.
Of het is een typo maar zoals je het hier hebt staan hebben ze niet dezelfde stamp:
timestamp 1130709600
timestamp 1130796000

Ze lijken veel op elkaar :)

Kwa oplossing zou ik ook voor de PHP oplossing gaan. Ik werk ook erg veel met smarty maar ik laat smarty zo min mogelijk "echte" PHP dingen uitvoeren, lijkt me anders nogal dubbelop.

iRacing profiel - FanaLEDs voor je racesimulatie displays en meer!

Pagina: 1