[php] datetime object vergelijken

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Saven
  • Registratie: December 2006
  • Laatst online: 21:52

Saven

Administrator

Topicstarter
Hola,

Vandaag liep ik tegen iets aan wat (volgens mij) in het verleden altijd prima heeft gewerkt. Namelijk: ik stel een datum in, en alleen bepaalde 'posts' waarvan de datum hoger ligt mogen behandeld worden.

PHP:
1
2
3
4
5
6
7
                        $sincedate = new DateTime( $settings['post_sincedate'] );
                        $post_date = new DateTime( $post->created_at );

                        if( $post_date > $sincedate )
                        {
                            // do stuff, echo 'abc..';
                        }


Probleem is dat hij nooit in de if terecht komt. Input:
'since date': 2016-01-06 00:00:00
'post date': 2016-01-07 16:40:42


Voorheen heeft dit t wel altijd gedaan ;( Serverbeheerder heeft voor zover ik weet geen PHP-updates uitgevoerd, misschien dat het daar aan kan liggen? Heb alleen niks kunnen vinden over een andere afhandeling van datetime objects vergeleken met vorige versies.

Iemand enig idee? 8)7

Beste antwoord (via Saven op 11-01-2016 14:42)


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

NMe

Quia Ego Sic Dico.

$settings['post_sincedate'] vs 'since date' en 'post date'. Je geeft ofwel een stukje informatie niet, ofwel je instantieert het zaakje met een foute waarde. ;)

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

Alle reacties


Acties:
  • 0 Henk 'm!

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 17:41
Saven schreef op maandag 11 januari 2016 @ 13:58:
Hola,

Vandaag liep ik tegen iets aan wat (volgens mij) in het verleden altijd prima heeft gewerkt. Namelijk: ik stel een datum in, en alleen bepaalde 'posts' waarvan de datum hoger ligt mogen behandeld worden.

PHP:
1
2
3
4
5
6
7
                        $sincedate = new DateTime( $settings['post_sincedate'] );
                        $post_date = new DateTime( $post->created_at );

                        if( $post_date > $sincedate )
                        {
                            // do stuff, echo 'abc..';
                        }


Probleem is dat hij nooit in de if terecht komt. Input:
'since date': 2016-01-06 00:00:00
'post date': 2016-01-07 16:40:42


Voorheen heeft dit t wel altijd gedaan ;( Serverbeheerder heeft voor zover ik weet geen PHP-updates uitgevoerd, misschien dat het daar aan kan liggen? Heb alleen niks kunnen vinden over een andere afhandeling van datetime objects vergeleken met vorige versies.

Iemand enig idee? 8)7
Weet je zeker dat je input klopt? Is $post->created_date en $settings['post_sincedate'] allebei een string in hetzefde format? Als je de DateTime objecten dumpt, krijg je dan het verwachte resultaat?

Zie testcase, waar het wel goed gaat: https://3v4l.org/G3nT2
PHP:
1
2
3
4
5
6
7
8
9
10
<?php

$sincedate = new DateTime( '2016-01-06 00:00:00' );
$post_date = new DateTime( '2016-01-07 16:40:42' );

if ( $post_date > $sincedate ) {
    echo 'Post date > since';
}

// Resultaat: Post date > since

[ Voor 8% gewijzigd door Barryvdh op 11-01-2016 14:10 ]


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Doe eens een
code:
1
var_dump
van beide variable op lijn 3.

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • Beste antwoord
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

$settings['post_sincedate'] vs 'since date' en 'post date'. Je geeft ofwel een stukje informatie niet, ofwel je instantieert het zaakje met een foute waarde. ;)

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

  • Saven
  • Registratie: December 2006
  • Laatst online: 21:52

Saven

Administrator

Topicstarter
NMe schreef op maandag 11 januari 2016 @ 14:38:
$settings['post_sincedate'] vs 'since date' en 'post date'. Je geeft ofwel een stukje informatie niet, ofwel je instantieert het zaakje met een foute waarde. ;)
Pff, inderdaad |:( Sorry guys, kom er net achter dat de db query niet eens bij die resultaten aankomt, zit een limit op, maar er zijn meer posts die die niet moet pakken dan het limiet. Kortom, de goede posts worden dus nooit uitgespuugd door de query.

Dat stukje code is dus waarschijnlijk op een hungover zondagmiddag een keer in elkaar geklopt :+ Thanks in ieder geval!

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Klinkt als iets dat in je WHERE kan staan, aka een filter op de verkeerde plek (code ipv db).

[ Voor 37% gewijzigd door Voutloos op 11-01-2016 14:52 ]

{signature}


Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Laatst online: 14:55

Damic

Tijd voor Jasmijn thee

En kun je niet beter http://php.net/manual/en/datetime.diff.php gebruiken, moest je ze willen vergelijken.
laat maar.

[ Voor 8% gewijzigd door Damic op 11-01-2016 21:14 ]

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag

Pagina: 1