[PHP] Date & Timezone

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • gepebril
  • Registratie: November 2001
  • Laatst online: 28-03-2023
Hallo,

geschiedenis
Ik programmeer al jaren in PHP4&5 en wil nu voor een applicatie datums en tijden weergeven afhankelijk van de client lokatie (instelling)

Wat wil ik
Alle gebruikte datum & tijdstempels komen uit een SQL database en zijn weggeschreven volgens CET (Central European Time) zone. Nu zitten veel klanten in Suriname en we willen graag dat hun acties gewoon in CET in de database weggeschreven blijven worden, maar voor de ingelogde klanten (WEB) als Caracas (Venezuela) tijdzone zichtbaar zijn.

Voorwerk
Ik heb al uren lang gezocht op het Net naar voorbeelden in PHP5 die dit eenvoudig mogelijk zouden moeten maken. Maar het OO model wat gehanteerd wordt, maakt alles een beetje fuzzie voor me. Ik kom er niet uit, waarschijnlijk daar ik nog nooit object oriented gewerkt heb. De gebruikte PHP versie is 5.2.6-2

Wat heb ik nodig
- De code die de datum & tijdstring zoals deze uit de MySQL DB gelezen wordt omzet naar de correcte tijd volgens de client (die zich in Caracas bevind). Rekening houdend met Daylight saving time en eventueel schrikkeljaar. Dit zou volgens de PHP website via enkele regels mogelijk dienen te zijn.....

Acties:
  • 0 Henk 'm!

  • haneev
  • Registratie: November 2005
  • Laatst online: 16-09 15:52
Je komt snel uit bij Javascript, omdat die client side werkt.
En anders moet je misschien met locatie van IP gaan werken, maar dat is nooit zeker. (zoals wel eerder besproken in topics). Als je eenmaal de locatie weet is het inderdaad met een paar regels PHP te realiseren, maar het lastige is dat je eigenlijk niet weet waar je client zit. (tenzij bijvoorbeeld achter een inlog, dat je het dan wel weet) Zie voor regio functies: php.net

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
haneev schreef op donderdag 23 april 2009 @ 17:20:
Je komt snel uit bij Javascript, omdat die client side werkt.
Welnee.Het kan best serverside, maar dan heb je dus 1 extra gegeven nodig: de tijdzone van een gebruiker. En die zou de gebruiker best gewoon zelf kunnen kiezen. :P

{signature}


Acties:
  • 0 Henk 'm!

  • gepebril
  • Registratie: November 2001
  • Laatst online: 28-03-2023
Het probleem IS NIET het bepalen van de tijdzone van de klant en server. Het gaat 100% om de conversie.

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

PHP:
1
2
3
4
5
6
7
8
9
date_default_timezone_set('Europe/London');

$datetime = new DateTime('2008-08-03 12:35:23');
echo $datetime->getTimezone()->getName() . ":". $datetime->format(DATE_ATOM) ." <br>";


$la_time = new DateTimeZone('America/Los_Angeles');
$datetime->setTimezone($la_time);
echo $datetime->getTimezone()->getName() . ":". $datetime->format(DATE_ATOM) ." <br>";

Standaard PHP 5.2.x functies http://nl.php.net/manual/en/class.datetime.php

[ Voor 5% gewijzigd door LuCarD op 23-04-2009 17:28 ]

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • gepebril
  • Registratie: November 2001
  • Laatst online: 28-03-2023
Aha, dat ziet er mooi uit LuCarD. Heb het net geprobeerd en het werkt :). En als je nu de tijd wil aangeven in yyyy-mm-dd hh:mm:ss zodat je een klantvriendelijke tijdmelding krijgt.

Bleek niet zo moeilijk te zijn:
PHP:
1
 $datetime->format('Y-m-d H:i:s')

[ Voor 15% gewijzigd door gepebril op 23-04-2009 17:56 ]


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

gepebril schreef op donderdag 23 april 2009 @ 17:39:
[...]


Aha, dat ziet er mooi uit LuCarD. Heb het net geprobeerd en het werkt :). En als je nu de tijd wil aangeven in yyyy-mm-dd hh:mm:ss zodat je een klantvriendelijke tijdmelding krijgt.
Heb je die manual überhaupt al eens bekeken voor je dat vroeg?
http://nl.php.net/manual/en/datetime.format.php

'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.


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

gepebril schreef op donderdag 23 april 2009 @ 17:39:
Aha, dat ziet er mooi uit LuCarD. Heb het net geprobeerd en het werkt :). En als je nu de tijd wil aangeven in yyyy-mm-dd hh:mm:ss zodat je een klantvriendelijke tijdmelding krijgt.
Kan me niet voorstellen dat daar geen functies voor zijn binnen PHP, zie bijvoorbeeld ook http://nl.php.net/manual/en/ref.datetime.php en ik denk dat http://nl3.php.net/manual/en/function.strptime.php je ook wel helpen kan.

Acties:
  • 0 Henk 'm!

  • gepebril
  • Registratie: November 2001
  • Laatst online: 28-03-2023
Bedankt allemaal. Weet niet of je een topic kan afsluiten. Is iig geen button voor.

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

gepebril schreef op donderdag 23 april 2009 @ 17:58:
Bedankt allemaal. Weet niet of je een topic kan afsluiten. Is iig geen button voor.
Die knop heb jij ook niet, alleen moderators. ;) Topics gaan niet op slot als ze opgelost zijn, maar als ze niet aan het beleid voldoen. Voor hetzelfde geld wil iemand anders graag nog verder discussiëren over dit onderwerp. ;)

'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.


Acties:
  • 0 Henk 'm!

  • Lantash
  • Registratie: April 2006
  • Laatst online: 16-09 10:08
NMe schreef op donderdag 23 april 2009 @ 18:01:
[...]

Die knop heb jij ook niet, alleen moderators. ;) Topics gaan niet op slot als ze opgelost zijn, maar als ze niet aan het beleid voldoen. Voor hetzelfde geld wil iemand anders graag nog verder discussiëren over dit onderwerp. ;)
Precies! Zoals nu:

Ik werk in een zelfde soort systeem.
Een gebruiker kan datums invoeren, die dan de database in worden gezet, maar dit wordt op de meeste plekken gedaan in tekstvelden. Om het in SQL begrijpbaar te maken (voor de to_timestamp methode), wordt de DateTime class gebruikt om de datum te parsen en daarna weer met de format methode eruit te halen.

Nu lijkt het mij onmogelijk om dit in PHP aan te passen. Of heb ik dit verkeerd?
Is er ook een manier om een PHP sessie aan een SQL sessie te knopen en zo de SQL sessie timezone aan te passen? Of doet PHP dit standaard al?
Pagina: 1