[PHP] Datum niet goed!

Pagina: 1
Acties:

Onderwerpen


  • Ad Hox
  • Registratie: Maart 2003
  • Laatst online: 19:58
Ik heb een activiteitenscript waarbij de datum van vandaag ORANJE (#529CCD)gemarkeerd word, namelijk:

PHP:
1
2
3
4
5
6
$tov = $record->dag;
$tov2 = $record->maand;
$tov3 = $tov . ' ' . $tov2;

if ($datum==$tov3){$color='#529CCD';}
if ($datum !=$tov3){$color='#000000';}


Ik heb het helemaal zelf gemaakt, dus gewoon een DB met de dagen maanden (en jaren). Dat leest ie uit en als de datum match met de datum van vandaag moet de kleur dus ORANJE (#529CCD) worden.

Nu heb ik een heel irritant probleem, namelijk als volgt:
de datum op PHP lijkt niet te kloppen! Als ik echo "$datum"; doe (dus gewoon de datum op de pagina laat zien) staat er: 16 november 2005. Het is vandaag 17 november 2005!
Dus lijkt wel of PHP een dagje ofzo achterloopt? Hoe kan ik dit oplossen, en/of waar ligt dit aan?

[ Voor 7% gewijzigd door Ad Hox op 17-11-2005 13:34 ]


  • Justifier
  • Registratie: December 2004
  • Laatst online: 06-04-2024
staat de datum op de server waar de webserver op draait wel goed?

  • Ad Hox
  • Registratie: Maart 2003
  • Laatst online: 19:58
Mijn domein word gehost op de Filipijnen en mijn mannetje is er niet...ik dacht dat ik het misschien zelf kon oplossen?

  • pasta
  • Registratie: September 2002
  • Laatst online: 12-01 14:16

pasta

Ondertitel

Waar vul je $datum mee, en waarom gebruik je daar niet gewoon date voor (als je dat niet nog niet gebruikte) :?

offtopic:
Dit lijkt me meer iets voor Programming & Webscripting, ik verplaats je thread dan ook even. ;)

Signature


  • Ad Hox
  • Registratie: Maart 2003
  • Laatst online: 19:58
Oke, is goed. Ik gebruik dit script omdat ik alle activiteiten in een database moet zetten met hun datum erbij. Ik moet het natuurlijk goed kunnen sorteren dus ik doe gewoon een query met daarin: SELECT * FROM 'oktober' WHERE jaar = '2005' ORDER BY 'dag'.

Met date() lukte dat niet helemaal.

Maar goed, dat datum script zelf $datum:

PHP:
1
$datum = date("d") . ' ' . $arraymaand[date("n") - 1];


Lijkt mij wel gewoon goed? Heeft ieder geval altijd gewerkt!

edit:
Het werkt wel gewoon op mijn .nl domein 8)7

[ Voor 27% gewijzigd door Ad Hox op 17-11-2005 13:43 ]


  • GlowMouse
  • Registratie: November 2002
  • Niet online
Ad Hox schreef op donderdag 17 november 2005 @ 13:36:
Mijn domein word gehost op de Filipijnen en mijn mannetje is er niet...ik dacht dat ik het misschien zelf kon oplossen?
Dat lijkt een probleem met een tijdzone. Het leuke is dat je daar met date omheen kunt werken.

Je gebruikt nu $arraymaand om Nederlandse maanden te krijgen. Kun je dat niet beter doen met setlocale() en strftime?

Verwijderd

Laat maar :) Ik ben stom, las ff niet goed.

[ Voor 147% gewijzigd door Verwijderd op 17-11-2005 13:46 ]


  • Ad Hox
  • Registratie: Maart 2003
  • Laatst online: 19:58
Ik gebruik indd een array om nederlands maanden te krijgen. Maar die zijn gewoon goed. De dag lijkt alleen niet te kloppen.

Zou inderdaad een tijdzone probleem kunnen zijn, maar hoe los ik dat dan op? Zodat het wel als output blijft geven: 0X MAAND JAAR (dus ook met de 0 voor de dag indien het een 1 t/m 9 is).

Edit: Ik gebruik toch gewoon date |:( Of ik ben stom haha.

PHP:
1
$datum = date("d") . ' ' . $arraymaand[date("n") - 1];


date ("d") dus.

[ Voor 20% gewijzigd door Ad Hox op 17-11-2005 13:46 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op donderdag 17 november 2005 @ 13:43:
code:
1
$arraymaand[date("n") - 1];

???? Dat is voor de dag of zo? Doe je toch gewoon met date("d") 8)7
Het array heet "arraymaand". Goh, wat zou date("n") toch zijn? ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Ad Hox
  • Registratie: Maart 2003
  • Laatst online: 19:58
Ik heb even naar gekeken:

PHP:
1
2
3
4
5
6
7
<?php
/* Set locale to Dutch */
setlocale(LC_ALL, 'nl_NL');


echo strftime("%A %e %B %Y");
?>


Geeft woensdag 16 november 2005 weer |:( Het is vandaag toch de 17e of ik ben gek ;)

[ Voor 15% gewijzigd door Ad Hox op 17-11-2005 13:54 ]


  • GlowMouse
  • Registratie: November 2002
  • Niet online
Ad Hox schreef op donderdag 17 november 2005 @ 13:45:
Edit: Ik gebruik toch gewoon date |:( Of ik ben stom haha.
Je kunt eromheen werken. Date kan niet raden naar welke tijdzone je wilt converteren. Kijk ook eens naar de tweede parameter: int timestamp. Als je daar de huidige timestamp neemt, en er een beetje van afhaalt of bij optelt, krijg je de Nederlandse tijd.
PHP:
1
2
setlocale(LC_ALL, 'nl_NL', 'nld_nld');
echo strftime('%A %e %B %Y',time()+[aantal uren verschil]*3600);

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Lichtelijk offtopic:

PHP:
1
2
if ($datum==$tov3){$color='#529CCD';} 
if ($datum !=$tov3){$color='#000000';}


kan sneller zo:

PHP:
1
$color = $datum==$tov3 ? '#529CCD' : '#000000';

[ Voor 12% gewijzigd door Michali op 17-11-2005 13:57 ]

Noushka's Magnificent Dream | Unity


  • Ad Hox
  • Registratie: Maart 2003
  • Laatst online: 19:58
Bij navraag blijkt mijn server in Houston te zitten, weet iemand hoeveel uur verschil dat is :) Dan ga ik 't gelijk ff proberen.

Krijg trouwens een parse error.

[ Voor 15% gewijzigd door Ad Hox op 17-11-2005 14:01 ]


  • GlowMouse
  • Registratie: November 2002
  • Niet online
Ad Hox schreef op donderdag 17 november 2005 @ 13:58:
Bij navraag blijkt mijn server in Houston te zitten, weet iemand hoeveel uur verschil dat is :) Dan ga ik 't gelijk ff proberen
Als je snel bent, kun je dit gebruiken:
PHP:
1
echo (time() - 1132232508)/3600;

  • Ad Hox
  • Registratie: Maart 2003
  • Laatst online: 19:58
Ik krijg een getal dat afloopt bij iedere refresh.

-9.59194444444

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Ad Hox schreef op donderdag 17 november 2005 @ 14:11:
Ik krijg een getal dat afloopt bij iedere refresh.

-9.59194444444
Vreemd, het zou juist op moeten lopen. Maar aan de hand van dit getal vermoed ik dat het tijdsverschil 10 uur bedraagt.

  • Ad Hox
  • Registratie: Maart 2003
  • Laatst online: 19:58
Ik krijg een parse error als ik in dat scriptje 10 invoer. Tevens loopt dat getal op (ipv af). Het is nu 9.4

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

TJongejonge, zo moeilijk is het toch niet om zelf een scriptje te schrijven dat de datum + tijd afdrukt? Kijk vervolgens hoe laat het hier is en je weet het verschil.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • GlowMouse
  • Registratie: November 2002
  • Niet online
Ad Hox schreef op donderdag 17 november 2005 @ 14:17:
Ik krijg een parse error als ik in dat scriptje 10 invoer. Tevens loopt dat getal op (ipv af). Het is nu 9.4
van -9.59 naar 9.4 is toch een flinke toename?

Een parse error moet je zelf op kunnen lossen, dat hoort bij het debuggen.

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Gebruik gewoon eens date('r'); om te kijken wat de tijd op je server is, lijkt me makkelijker dan te blijven gokken ;)

Blog [Stackoverflow] [LinkedIn]


  • Ad Hox
  • Registratie: Maart 2003
  • Laatst online: 19:58
Wed, 16 Nov 2005 22:33:56 -0600

Dat is de datum op de server, mbv date(r).

Die uren verzetten is nog niet gelukt. En ik bedoelde van -9,5 naar -9,5 maar is inmiddels -8,x geworden.

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Als ik het zo zie dan moet je ~+16,5 uur hebben?
Ik weet niet wanneer je het precies hebt uitgevoerd maar er vanuit gaande dat het 15:00 hebt gedaan (en de server tijd was toen dus ongeveer 22:30) dan zou je dus 15 + 24-22,5 = 16,5uur = 59400 seconden nodig hebben.

Dus zou je als het goed is hiermee de correcte tijd/datum moeten hebben: date('D M j G:i:s T Y', time() + 59400);

Blog [Stackoverflow] [LinkedIn]


  • Ad Hox
  • Registratie: Maart 2003
  • Laatst online: 19:58
Dat is de oplossing Wolfboy!

PHP:
1
$datum = date('d',time() + 59400) . ' ' . $arraymaand[date("n") - 1];


Bedankt!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Uhm, die 2e date() zal dezelfde behandeling nodig hebben hoor, anders ga je aan het eind/begin van de maand gegarandeerd hetzelfde probleem krijgen ;)

Blog [Stackoverflow] [LinkedIn]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Doe dan gewoon ( zoals al eerder gezegd )
PHP:
1
2
3
setlocale(LC_ALL, 'nl_NL', 'nld_nld');
$datum = time() + 16.5 * 60 * 60;
echo strftime('%A %e %B %Y', $datum );

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Anders los je gewoon het probleem even op en schakel je serverbeheer in dat de tijd op hun server wild fout staat. Houston is geen 16.5 uur verschil met Nederland maar slechts 7... normaliter. Dat kan dus met zomertijd en wintertijd varieren, oftewel de enige correcte manier is om PHP de tijdzone correct te laten converteren vanaf een correct ingestelde tijd. Wat je nu doet is nog niet eens een doekje voor het bloeden maar eerder een vloeipapiertje tegen een drievoudige botbreuk.

Professionele website nodig?


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Iets als
PHP:
1
2
3
setlocale(LC_ALL, 'nl_NL', 'nld_nld');
putenv("TZ=Europe/Amsterdam");
echo strftime('%A %e %B %Y', time() );

zou idd nog een stuk beter zijn. Maar het is ook zeker niet handig om je eigen Array met maanden bij te houden. Stel nou dat je je site opeens in het Engels wilt? Dan moet je alle namen aan gaan passen. Met setlocale hoef je alleen de locale aan te passen.

[ Voor 10% gewijzigd door Woy op 17-11-2005 16:52 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

curry684 schreef op donderdag 17 november 2005 @ 16:26:
Anders los je gewoon het probleem even op en schakel je serverbeheer in dat de tijd op hun server wild fout staat. Houston is geen 16.5 uur verschil met Nederland maar slechts 7....
Dat klopt idd ja, je ziet ook dat de server aangeeft dat ze daar in GMT-6 zitten, maar de tijd loopt gewoon niet goed.

Maarja, de TS heeft al gezegd dat de admin niet te bereiken is dus voorlopig is dit de enige oplossing :P

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Dan nog heeft ie geen keuze. Met constantes rekenen is simpelweg geen optie. De helft van de wereld heeft wel zomertijd, de andere helft niet. Op de zuidelijke helft van de wereld gaat zomertijd logischerwijs andersom dan hier. Op dit moment is het in Brazilie 3 uur vroeger dan hier, in onze zomer is dat 5 uur, en in een paar weken tussendoor 4 uur. Veel plezier met constantes :z

Hij moet sowieso 'netjes' de tijdzones omrekenen, en dat je vervolgens eventueel met een constante de tijd moet offsetten omdat je te cheap bent om voor een betrouwbare en bereikbare hoster in NL te betalen is dan secundair.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Daar heb je idd gelijk in ja, dan zou je de tijd moeten aanpassen zoals rwb het doet + een constante offset, maargoed, dat zomer/wintertijd probleem komt pas over een tijdje dus ik mag hopen dat z'n host het tegen die tijd al opgelost heeft :P

Blog [Stackoverflow] [LinkedIn]

Pagina: 1