[PHP] 2 keer date() vergelijken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • We Are Borg
  • Registratie: April 2000
  • Laatst online: 22:25

We Are Borg

Moderator Wonen & Mobiliteit / General Chat
Topicstarter
Ik wil graag een bestand laten verlopen na een bepaalde datum. Een soort houdbaarheidsdatum. Ik geef een houdbaarheidsdatum op en vergelijk deze met de huidige datum. Wanneer houdbaarheid verlopen is, dan moet er een die() komen. Hiervoor heb ik volgende bedacht:

PHP:
1
2
3
4
5
6
7
8
<?php 
$woei = date ('d-m-Y'); 
$test = '18-01-1985'; 

if ( $woei <= $test ) { 
die ('bestand is niet meer geldig'); 
} 
?> 


Dit werkt dus helaas voor geen meter. Wanneer ik bijvoorbeeld 16-01-2030 invul, krijg ik toch een die() message. De 16 is namelijk kleiner en het jaar wordt compleet genegeerd. Uit een simpele zoekactie met de got search kwam de functie mktime() naarvoren als de oplossing. Na het lezen van de uitleg op php.net kwam ik uit op het volgende resultaat:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php 

$mijn_day = '01'; 
$mijn_month = '01'; 
$mijn_year = '2001'; 

$mijn_datum =
mktime(0,0,0,$mijn_day,$mijn_month,$mijn_year); 

$dateday = date ('d'); 
$datemonth = date ('m'); 
$dateyear = date ('Y'); 
$date_today = mktime(0,0,0,$dateday,$datemonth,$dateyear); 

$difference = $date_today - $mijn_datum; 

if ( $difference <= '0' ) { 
    die ('oud bestand'); 
} 

?> 


Resultaat helaas weer verkeerd. Ik krijg de melding 'oud bestand' niet wanneer ik bijv een datum invoer van 1990. Toch ben ik overtuigd dat dit de oplossing zou moeten zijn. Wat doe ik fout met het uitvoeren van deze functie of moet ik een andere oplossing zoeken?

Acties:
  • 0 Henk 'm!

  • André
  • Registratie: Maart 2002
  • Laatst online: 12-09 14:32

André

Analytics dude

Kun je niet die timestamp gebruiken die de tijd sinds 1970 in milliseconden weergeeft? In js is dat date().getTime();

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

beide dates omzetten naar een unixtimestamp en/of de boel omdraaien in je bovenstaande stringetje, bijv zo:
PHP:
1
$reverse_datum = preg_replace('/([0-9]{2})-([0-9]{2})-([0-9]{4})/', '\3-\2-\1', $datum);

En dat met de output van date('Y-m-d') vergelijken.

Maar werken met timestamps is waarschijnlijk iets netter.

Acties:
  • 0 Henk 'm!

Verwijderd

Misschien is het makkelijker als je het volgende gebruikt:
mktime - Geef UNIX timestamp voor een date
microtime - Geef huidige UNIX timestamp met microseconden

Das makkelijker om te berekenen.

Acties:
  • 0 Henk 'm!

  • We Are Borg
  • Registratie: April 2000
  • Laatst online: 22:25

We Are Borg

Moderator Wonen & Mobiliteit / General Chat
Topicstarter
Met mktime (wat ik gebruik) krijg je toch een timestamp?

PHP:
1
echo $date_today;


Geeft namelijk 1075258386 :) Of zie ik het verkeerd en maak ik met het 2de script geen timestamp ?

Trouwens even zelf zitten kijken.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php

$mijn_day = '01-01-1700';
$mijn_datum = mktime($mijn_day); 

echo $mijn_datum;
echo '<br/><br/>';

$dateday = date ('d-m-Y');
$date_today = mktime($dateday);

echo $date_today; 
echo '<br/><br/>';

$verschil = $mijn_datum - $date_today;
echo $verschil;
echo '<br/><br/>';

if ( $verschil <= '0'); {

    die ('Licentie ongeldig');
}

?> 


Geeft ALTIJD een verschil van -93600. Maakt niet uit wat ik van $mijn_day = '01-01-1700'; maak. Kortom, ik doe iets fout |:(

[ Voor 81% gewijzigd door We Are Borg op 27-01-2004 19:07 ]


Acties:
  • 0 Henk 'm!

  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

We Are Borg schreef op 27 januari 2004 @ 18:53:
PHP:
1
echo $date_today;


Geeft namelijk 1075258386 :)
Heel goed! Nou ook nog een echo $mijn_datum erachter plakken, en je ziet dat je code (de tweede versie dan) best goed werkt.

Maar als je een datum in het verleden van de datum van vandaag aftrekt, hou je natuurlijk altijd een positief getal over. Een test op < 0 is dan altijd false, en je krijgt je melding niet. Kortom: ga eens testen met toekomstige data :)

Overigens kan je ipv regel 10-13 uit voorbeeld 2 ook
PHP:
1
$date_today = mktime(0,0,0);
doen - zie
Arguments may be left out in order from right to left; any arguments thus omitted will be set to the current value according to the local date and time.
Dat is ff wat korter ;)
edit:
Je zou in je eerste voorbeeld trouwens eens aan date("Y-m-d") moeten denken :P

edit:

Naar aanleiding van je constante verschil-edit: een datumstring aan mktime voeren is tamelijk suf :) Tegen jou durf ik het wel te zeggen: RTFM :> Link hierboven, moet je hebben.

[ Voor 18% gewijzigd door Rataplan op 27-01-2004 19:11 ]


Journalism is printing what someone else does not want printed; everything else is public relations.


Acties:
  • 0 Henk 'm!

  • We Are Borg
  • Registratie: April 2000
  • Laatst online: 22:25

We Are Borg

Moderator Wonen & Mobiliteit / General Chat
Topicstarter
Rataplan schreef op 27 januari 2004 @ 19:06:
[...]

Heel goed! Nou ook nog een echo $mijn_datum erachter plakken, en je ziet dat je code (de tweede versie dan) best goed werkt.
We dachten even precies hetzelfde. Zie mijn edit.
Maar als je een datum in het verleden van de datum van vandaag aftrekt, hou je natuurlijk altijd een positief getal over. Een test op < 0 is dan altijd false, en je krijgt je melding niet. Kortom: ga eens testen met toekomstige data :)
True, maar ik merk dat wat ik ook invul bij mijn eigen datum, dat er altijd een verschil is van -93600. Dat kan toch niet? Als ik 10-10-2080 invul moet het verschil toch anders worden?
Overigens kan je ipv regel 10-13 uit voorbeeld 2 ook
PHP:
1
$date_today = mktime(0,0,0);
doen - zie
[...]
Dat is ff wat korter ;)
edit:
Je zou in je eerste voorbeeld trouwens eens aan date("Y-m-d") moeten denken :P
Thanks, zal nu even doornemen. Hoe korter hoe beter ;)

Acties:
  • 0 Henk 'm!

  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

We Are Borg schreef op 27 januari 2004 @ 19:10:
True, maar ik merk dat wat ik ook invul bij mijn eigen datum, dat er altijd een verschil is van -93600. Dat kan toch niet? Als ik 10-10-2080 invul moet het verschil toch anders worden?
Zie *mijn* 2e edit ;) En beperk je for safety's sake ff tot de periode 1970-2030, anders bestaat de kans dat je ruzie met de timestamps gaat krijgen.

[ Voor 18% gewijzigd door Rataplan op 27-01-2004 19:13 ]


Journalism is printing what someone else does not want printed; everything else is public relations.


Acties:
  • 0 Henk 'm!

  • We Are Borg
  • Registratie: April 2000
  • Laatst online: 22:25

We Are Borg

Moderator Wonen & Mobiliteit / General Chat
Topicstarter
Rataplan schreef op 27 januari 2004 @ 19:11:
[...]
Zie *mijn* 2e edit ;) En beperk je for safety's sake ff tot de periode 1970-2030, anders bestaat de kans dat je ruzie met de timestamps gaat krijgen.
Ik heb de manual nogmaals doorgenomen met jouw opmerking over 'suf' in mijn achterhoofd. Ik heb de eerste keer niet zo geluisterd naar de waarschuwingen en tips, maar nu wel ;)

PHP:
1
2
3
4
5
6
7
8
$blaat = date ( "M-d-Y", mktime( 0,0,0,12,32,1975 ) ); 
echo $blaat;
echo '<br/><br/>'; 

$blaat2 = date ('M-d-Y', mktime() ); 

echo $blaat2; 
echo '<br/><br/>';


Maar goed, een manier op deze 2 te vergelijken staat niet in de manual. Nu alleen naar seconden omzetten, want zo kan ik niet vergelijken :) Search op funtie timestamp levert weinig op bij php.net.


Voorbeeld van
web at nihongo dot d2g dot com
04-Jan-2004 09:52
doet precies wat ik wil. Ik ga daar eens naar kijken. Bedankt voor advies :)

[ Voor 23% gewijzigd door We Are Borg op 27-01-2004 19:32 ]


Acties:
  • 0 Henk 'm!

  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

Kniettesnappeniet...

Maak je met die twee mktimes prima timestamps, die je gewoon met elkaar kan vergelijken, maak je er met "date" weer strings van... Nergens voor nodig, en bovendien nog steeds in de verkeerde volgorde ("Y-m-d" moet je hebben! Jaar achteraanzetten helpt niet, dat is je Most Significant Dinges en die moet voorop. Meer over strings en wat je er mee kan begint hier).

Doe nou gewoon eens
PHP:
1
2
3
echo $a = mktime( 0,0,0,5,5,1975); // niet meteen de randjes opzoeken :)
echo $b = mktime(0,0,0);
echo $b - $a;
and take it from there...

[ Voor 3% gewijzigd door Rataplan op 27-01-2004 19:44 ]


Journalism is printing what someone else does not want printed; everything else is public relations.


Acties:
  • 0 Henk 'm!

  • We Are Borg
  • Registratie: April 2000
  • Laatst online: 22:25

We Are Borg

Moderator Wonen & Mobiliteit / General Chat
Topicstarter
Okee, ik ben even erg lomp geweest 8)7

Van een perfecte mktime maakte ik meteen een date, terwijl dit juist niet de bedoeling was. Bedankt voor je geduld Rataplan, ik ben eruit :P

Thanks!

* We Are Borg gaat even in hoekje zitten schamen ;)

[ Voor 4% gewijzigd door We Are Borg op 27-01-2004 20:23 ]


Acties:
  • 0 Henk 'm!

  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

Mooi dat het gelukt is Afbeeldingslocatie: http://www.rataplan.net/files/got/cheer.gif


Journalism is printing what someone else does not want printed; everything else is public relations.

Pagina: 1