De functie strftime() snapt geen objecten?
Huh? De functie strftime() snapt geen objecten?
Hoe te fixxen? Typcasten helpt niet....
Ik wil 2012-11-10T19:02:00+0100 welke uit een XMLfeed (SimpleXML) komt een fatsoenlijke leesbare datum geven. Hoe?
Is er een betere functie?
Quote:
strftime() expects parameter 2 to be long, object given
Hoe te fixxen? Typcasten helpt niet....
Ik wil 2012-11-10T19:02:00+0100 welke uit een XMLfeed (SimpleXML) komt een fatsoenlijke leesbare datum geven. Hoe?
Is er een betere functie?
Gewijzigd op 10/11/2012 19:12:00 door - Ariën -
volgens dit artikel moet je er een unix timestamp van maken:
http://stackoverflow.com/questions/5254553/warning-date-expects-parameter-2-to-be-long-string-given-in
Dat zou betekenen dat een object wel mag, maar jou datum format niet.
http://stackoverflow.com/questions/5254553/warning-date-expects-parameter-2-to-be-long-string-given-in
Dat zou betekenen dat een object wel mag, maar jou datum format niet.
Je gaat op 2 punten de mist in:
1. $item->Datum is geen long, maar een object
$item->Datum zal weer een SimpleXmlElement teruggeven. Om dit om te zetten naar een long moet je hem typecasten naar een int, dan zal je de tekst krijgen.
2. strftime() wil een long, geen string
Wat jij wilt is een string (2012-11-10T19:02:00+0100) omzetten, maar strftime wil geen string, het wel een long/integer. Om precies te zijn, het wil de waarde hebben die je terugkrijgt van time().
Oplossing
Gebruik geen strftime maar iets anders, zoals class.datetime:
1. $item->Datum is geen long, maar een object
$item->Datum zal weer een SimpleXmlElement teruggeven. Om dit om te zetten naar een long moet je hem typecasten naar een int, dan zal je de tekst krijgen.
2. strftime() wil een long, geen string
Wat jij wilt is een string (2012-11-10T19:02:00+0100) omzetten, maar strftime wil geen string, het wel een long/integer. Om precies te zijn, het wil de waarde hebben die je terugkrijgt van time().
Oplossing
Gebruik geen strftime maar iets anders, zoals class.datetime:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$date = '2012-11-10T19:02:00+0100';
$datetime = DateTime::createFromFormat('Y-m-d*H:i:sT', $date);
echo $datetime->format('Y m d \o\m H:i');
?>
$date = '2012-11-10T19:02:00+0100';
$datetime = DateTime::createFromFormat('Y-m-d*H:i:sT', $date);
echo $datetime->format('Y m d \o\m H:i');
?>
Gewijzigd op 11/11/2012 00:43:43 door Wouter J
Jep, ik zag het.....
Ik heb het aangepast naar de DateTime class waarmee het wel werkt. Ik moet deze toch eens vaker gebruiken.
(en minder onder tijdsdruk PHP'en ;-) )
Ik heb het aangepast naar de DateTime class waarmee het wel werkt. Ik moet deze toch eens vaker gebruiken.
(en minder onder tijdsdruk PHP'en ;-) )
Gewijzigd op 11/11/2012 00:44:02 door - Ariën -
Als je strtotime() gebruikt werkt het denk ik wel.
Eddy, over het algemeen is het DateTime object de vervanger van al deze s....time functies (precies zoals PDO de vervanger is van mysql_*). Je kan er een stuk beter formats mee omzetten, aangezien je precies kan aangeven in welk format hij aan komt.
En ik zou het eerder op deze manier doen (als je strtotime gebruikt):
En ik zou het eerder op deze manier doen (als je strtotime gebruikt):
Zeker voordeel van strftime is dat het Nederlandse dagen/maanden kent... date doet dat niet.
Wouter, wat ben jij toch negatief over dingen in PHP die niet OO zijn.
Het DateTime object heeft 2 grote nadelen, a) het werkt niet in alle PHP 5.x versies en b) zoals Eddy al aangeeft houdt het geen rekening met locale settings, dat laatste vind ik een zeer grote tekortkoming.
Het DateTime object heeft 2 grote nadelen, a) het werkt niet in alle PHP 5.x versies en b) zoals Eddy al aangeeft houdt het geen rekening met locale settings, dat laatste vind ik een zeer grote tekortkoming.
Ger, DateTime is geen OO maar gewoon een static class.
Gewijzigd op 11/11/2012 10:36:28 door - Raoul -
Dat DateTime geen rekening houdt met locales wist ik niet. En ik was gisteravond ook stevig in de war met strftime en strtotime.
Zodra ik weer items in mijn feed krijg ga ik naar Eddy's tip kijken. Dit lijkt me toch de beste manier dan, gezien ik toch wel graag de locales wil gebruiken.
Zodra ik weer items in mijn feed krijg ga ik naar Eddy's tip kijken. Dit lijkt me toch de beste manier dan, gezien ik toch wel graag de locales wil gebruiken.
Gewijzigd op 11/11/2012 12:28:00 door - Ariën -
Ger, mijn mening is totaal niet gebaseerd op het feit of iets OO is of niet. Het feit is wel dat PHP begint over te hevelen naar een OO taal waarbij de basis functionaliteit beter wordt gemaakt en in klassen wordt gestopt.
Daarnaast vind ik Datetime mooi werken met het importen van een format, omdat je het format zelf kunt verzinnen, als je maar opgeeft waar welke data staat. Ik had mijn scriptje ook zo kunnen schrijven:
Op de $datetime parameter die je overal moet meegeven na vind ik dit precies dezelfde 'goedheid' hebben.
Merk overigens op dat ik niet wist dat deze klasse niet met locale werkt, dat is wel een nadeel inderdaad. Eventueel zou je dan een combinatie van het DateTime object en de strftime kunnen gebruiken, mocht je vreemde formats gebruiken.
Dat het niet met elke PHP5 versie werkt vind ik wel een klein beetje onzin. Het werkt vanaf PHP5.2 en ik als je nu nog een host heeft met 5.1.x zou ik heel snel gaan vragen of hij hem niet wilt updaten. Je hebt dan namelijk een PHP versie die ouder is dan 2 Nov 2006!!
@Raoul, de DateTime is wel OO. Het is 1 klasse, heb ook nog DateInterval en nog een paar en het is zeker een OO library.
Daarnaast vind ik Datetime mooi werken met het importen van een format, omdat je het format zelf kunt verzinnen, als je maar opgeeft waar welke data staat. Ik had mijn scriptje ook zo kunnen schrijven:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$date = '2012-11-10T19:02:00+0100';
$datetime = date_create_from_format('Y-m-d*H:i:sT', $date);
echo date_format($datetime, 'Y m d \o\m H:i');
?>
$date = '2012-11-10T19:02:00+0100';
$datetime = date_create_from_format('Y-m-d*H:i:sT', $date);
echo date_format($datetime, 'Y m d \o\m H:i');
?>
Op de $datetime parameter die je overal moet meegeven na vind ik dit precies dezelfde 'goedheid' hebben.
Merk overigens op dat ik niet wist dat deze klasse niet met locale werkt, dat is wel een nadeel inderdaad. Eventueel zou je dan een combinatie van het DateTime object en de strftime kunnen gebruiken, mocht je vreemde formats gebruiken.
Dat het niet met elke PHP5 versie werkt vind ik wel een klein beetje onzin. Het werkt vanaf PHP5.2 en ik als je nu nog een host heeft met 5.1.x zou ik heel snel gaan vragen of hij hem niet wilt updaten. Je hebt dan namelijk een PHP versie die ouder is dan 2 Nov 2006!!
@Raoul, de DateTime is wel OO. Het is 1 klasse, heb ook nog DateInterval en nog een paar en het is zeker een OO library.
Gewijzigd op 11/11/2012 13:29:04 door Wouter J




