De functie strftime() snapt geen objecten?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- Ariën  -
Beheerder

- Ariën -

10/11/2012 19:11:45
Quote Anchor link
Huh? De functie strftime() snapt geen objecten?

Quote:
strftime() expects parameter 2 to be long, object given


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
strftime("%e %b %G om: %H:%M",$item->Datum)


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 -
 
PHP hulp

PHP hulp

22/12/2024 19:38:36
 
Bart van der Veen

Bart van der Veen

10/11/2012 19:45:57
Quote Anchor link
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.
 
Wouter J

Wouter J

10/11/2012 19:46:30
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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');
?>
Gewijzigd op 11/11/2012 00:43:43 door Wouter J
 
- Ariën  -
Beheerder

- Ariën -

11/11/2012 00:28:31
Quote Anchor link
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 ;-) )
Gewijzigd op 11/11/2012 00:44:02 door - Ariën -
 
Eddy E

Eddy E

11/11/2012 07:47:58
Quote Anchor link
Als je strtotime() gebruikt werkt het denk ik wel.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo strftime("%e %b %G om: %H:%M",strtotime($item->Datum));
?>
 
Wouter J

Wouter J

11/11/2012 08:51:05
Quote Anchor link
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):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo date('d M Y \o\m: H:M', strtotime($item->Datum));
?>
 
Eddy E

Eddy E

11/11/2012 09:18:36
Quote Anchor link
Zeker voordeel van strftime is dat het Nederlandse dagen/maanden kent... date doet dat niet.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

11/11/2012 10:06:41
Quote Anchor link
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.
 
- Raoul -

- Raoul -

11/11/2012 10:36:17
Quote Anchor link
Ger, DateTime is geen OO maar gewoon een static class.
Gewijzigd op 11/11/2012 10:36:28 door - Raoul -
 
- Ariën  -
Beheerder

- Ariën -

11/11/2012 12:27:08
Quote Anchor link
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.
Gewijzigd op 11/11/2012 12:28:00 door - Ariën -
 
Wouter J

Wouter J

11/11/2012 13:19:27
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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');
?>

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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.