[PHP] Convert DateTime naar string

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 128270

Topicstarter
Het gaat erom dat ik telkens de huidige datum in mijn database prop, maar aangezien mijn database niet in Europa staat moet ik de tijdszone wijzigen.

Onderstaand stukje code geeft bij een echo de correcte datum weer, maar wanneer ik de variabale $today in mijn database wil steken krijg ik de foutmelding dat hij DateTime niet kan omzetten naar een string.

Ik ben nu al de hele ochtend aan het zoeken naar een mogelijkheid om DateTime toch te kunnen omzetten naar string, maar blijkbaar is dit niet meer mogelijk in php?

PHP:
1
2
3
4
$timeZone = new DateTimeZone('Europe/Brussels');
$today = new DateTime();
$today->setTimezone($timeZone);
$today->format('Y-m-d');


Deze datum kan ik zonder problemen in de database steken, maar dit is uiteraard niet de correcte datum.
PHP:
1
$date = date("Y-m-d");

Acties:
  • 0 Henk 'm!

  • Bee.nl
  • Registratie: November 2002
  • Niet online

Bee.nl

zoemt

De class DateTime kent geen __toString(), dus dan krijg je inderdaad een error als je $today in je database propt. Als je goed kijkt naar DateTime::format(), dan zie je dat de methode een string retourneert.

Op deze manier werkt het wel:
PHP:
1
2
3
4
5
6
<?php
$timeZone = new DateTimeZone('Europe/Brussels');
$today = new DateTime();
$today->setTimezone($timeZone);
$date = $today->format('Y-m-d'); // $date is nu '2010-01-21'
?>

Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Mocht je PostgreSQL gebruiken, dan kun je gebruik maken de juiste tijdzones:
SQL:
1
2
SELECT 
  NOW() AT TIME ZONE 'CET' AS hier;

Uiteraard kun je ook per database de juiste tijdzone instellen of per record de gewenste tijdzone opgeven. Net wat je leuk vindt of nodig hebt.

[ Voor 3% gewijzigd door cariolive23 op 21-01-2010 14:52 ]


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 12-05 16:34
UIt de DB komt een ander format, dat convert je naar je gewenst format. Maar de database begrijpt dat nieuwe format niet, dus moet je hem terug converten naar het orginele format.

Acties:
  • 0 Henk 'm!

Anoniem: 128270

Topicstarter
Bee.nl schreef op donderdag 21 januari 2010 @ 14:51:
De class DateTime kent geen __toString(), dus dan krijg je inderdaad een error als je $today in je database propt. Als je goed kijkt naar DateTime::format(), dan zie je dat de methode een string retourneert.

Op deze manier werkt het wel:
PHP:
1
2
3
4
5
6
<?php
$timeZone = new DateTimeZone('Europe/Brussels');
$today = new DateTime();
$today->setTimezone($timeZone);
$date = $today->format('Y-m-d'); // $date is nu '2010-01-21'
?>
Zo werkt het inderdaad, bedankt.
Wel frustrerend dat ik hier de hele ochtend heb zitten op zoeken...

Acties:
  • 0 Henk 'm!

Anoniem: 140896

Ooit heb ik met een gelijksoortig probleem gezeten. Mijn oplossing is het volgende. Direct na het openen van de sql connectie voer ik 2 queries uit. Alle volgende queries in het php script zitten dan goed.
PHP:
1
2
$datumfix = mssql_query("set dateformat dmy");
$datefirstfix = mssql_query("SET DATEFIRST 1");


Ik zou alleen niet meer weten waar de tweede query voor is, maar het werkt zo wel.
Het fijne is zo ook dat je in de rest van je script niet hoeft na te denken over de juiste volgorde van de datum.

Acties:
  • 0 Henk 'm!

  • marco_balk
  • Registratie: April 2001
  • Laatst online: 15-04 09:53
Anoniem: 140896 schreef op vrijdag 22 januari 2010 @ 10:59:
Ooit heb ik met een gelijksoortig probleem gezeten. Mijn oplossing is het volgende. Direct na het openen van de sql connectie voer ik 2 queries uit. Alle volgende queries in het php script zitten dan goed.
PHP:
1
2
$datumfix = mssql_query("set dateformat dmy");
$datefirstfix = mssql_query("SET DATEFIRST 1");


Ik zou alleen niet meer weten waar de tweede query voor is, maar het werkt zo wel.
Het fijne is zo ook dat je in de rest van je script niet hoeft na te denken over de juiste volgorde van de datum.
Let op: dat zijn 2 MS SQL Server (niet MySQL) specifieke queries.
Pagina: 1