Toon posts:

strtotime werkt niet zoals ik het wil

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste Tweakers,

Ik hoop dat jullie mij willen helpen met een project waar ik mee bezig ben.
Voor een nieuwsbrief die wij willen verzenden moet een variabele tijd van afhalen van een bepaald product worden weergeven. Dit is altijd de eerstvolgende dinsdag.

Na wat onderzoek kwam ik uit op het volgende:
<? echo date('l jS F (d-m-Y)', strtotime('next Tuesday')); ?>

Het probleem dat dit in het Engels werd weergeven doordat de server Engelstalig is heb ik zo kunnen oplossen:
<?php
$dag = array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");
$dag2 = array("Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag");

$maand = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
$maand2 = array("Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December");

$date = strtotime('next Tuesday');
$date = date("l d F Y", strtotime($date));
$date = str_replace($dag, $dag2, $date);
$date = str_replace($maand, $maand2, $date);

echo $date;
?>

Echter nu is mijn output: Dinsdag 11 Januari 8400 ipv Dinsdag 12 Januari 2016.

Hoe kan ik dit oplossen??!??

Alvast bedankt!

Beste antwoord (via Verwijderd op 11-01-2016 13:35)


  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 17:41
Je doet 2x strtotime
PHP:
1
2
$date = strtotime('next Tuesday');
$date = date("l d F Y", strtotime($date));


Als je die 2de weghaalt, gaat het wel goed :)
https://3v4l.org/aZohq

Maar inderdaad, als je de Nederlandse locale op je server hebt, is strftime makkelijker:
PHP:
1
2
3
$time = strtotime('next Tuesday');
setlocale(LC_ALL, 'nl_NL');
echo strftime('%A %e %B %Y', $time);

https://3v4l.org/0prYW

[ Voor 60% gewijzigd door Barryvdh op 11-01-2016 09:08 ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • Ealanrian
  • Registratie: Februari 2009
  • Laatst online: 22:16
Heb je al geprobeerd om de locale te setten naar Nederlands zodat je geen replace hoeft te gebruiken?

Acties:
  • +1 Henk 'm!

  • IceM
  • Registratie: Juni 2003
  • Laatst online: 11-10 07:14
Is het niet handiger om setlocale met strftime te gebruiken om de taal in het Nederlands te zetten en direct de goede output te krijgen? Dan hoef je die vreemde omzetting niet te doen:

PHP:
1
2
3
4
<?php
setlocale(LC_ALL, 'nl_NL');

echo strftime('l jS F (d-m-Y)', strtotime('next Tuesday'));

[ Voor 4% gewijzigd door IceM op 11-01-2016 08:54 ]

...


Acties:
  • Beste antwoord
  • +4 Henk 'm!

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 17:41
Je doet 2x strtotime
PHP:
1
2
$date = strtotime('next Tuesday');
$date = date("l d F Y", strtotime($date));


Als je die 2de weghaalt, gaat het wel goed :)
https://3v4l.org/aZohq

Maar inderdaad, als je de Nederlandse locale op je server hebt, is strftime makkelijker:
PHP:
1
2
3
$time = strtotime('next Tuesday');
setlocale(LC_ALL, 'nl_NL');
echo strftime('%A %e %B %Y', $time);

https://3v4l.org/0prYW

[ Voor 60% gewijzigd door Barryvdh op 11-01-2016 09:08 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Had setlocale(LC_ALL, 'nl_NL'); inderdaad al geprobeerd..
Dit wilt op de één of andere manier niet werken..

<?php
$dag = array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");
$dag2 = array("Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag");

$maand = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
$maand2 = array("Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December");

$date = strtotime('next Tuesday');
$date = date("l d F Y", $date);
$date = str_replace($dag, $dag2, $date);
$date = str_replace($maand, $maand2, $date);

echo $date;
?>

Works like a charm! Schijnt niet de manier te zijn inderdaad..
Maar het hoeft niet netjes of clean, zolang het maar werkt haha!

Mochten jullie tijd / zin hebben, weet iemand toevallig hoe ik het zo kan maken, dat wanneer die "next Tuesday" binnen een termijn van 3 dagen al is, het de dinsdag er op moet zijn?
Met andere woorden: Het gaat om een bestelling van verse producten.. Mocht het bijv (zoals vandaag) morgen al dinsdag zijn, redden ze het niet om de bestelling nog te doen.. Dan moet het de dinsdag er op worden |:( ..

Voor nu: SUPER BEDANKT voor jullie hulp IceM en Barryvdh _/-\o_

[ Voor 21% gewijzigd door Verwijderd op 11-01-2016 13:41 . Reden: toevoeging ]


Acties:
  • 0 Henk 'm!

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 17:41
Verwijderd schreef op maandag 11 januari 2016 @ 13:34:
Mochten jullie tijd / zin hebben, weet iemand toevallig hoe ik het zo kan maken, dat wanneer die "next Tuesday" binnen een termijn van 3 dagen al is, het de dinsdag er op moet zijn?
Met andere woorden: Het gaat om een bestelling van verse producten.. Mocht het bijv (zoals vandaag) morgen al dinsdag zijn, redden ze het niet om de bestelling nog te doen.. Dan moet het de dinsdag er op worden |:( ..

Voor nu: SUPER BEDANKT voor jullie hulp IceM en Barryvdh _/-\o_
Eerst +3 dagen, dan de eerste dinsdag pakken misschien?

code:
1
2
3
4
<?php
$date = new DateTime('+3 days');
$date->modify('next tuesday');
echo $date->format('l d F Y');

https://3v4l.org/6h269

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op maandag 11 januari 2016 @ 13:34:
Had setlocale(LC_ALL, 'nl_NL'); inderdaad al geprobeerd..
Dit wilt op de één of andere manier niet werken..
Dan kijk je naar de return value van die call en vraag je wanneer nodig iemand van systeembeheer of de Nederlandse locale gefixed kan worden. Soms wordt er overigens een '.UTF8' suffix gebruikt.

Dit is uitendelijk de oorzaak van je probleem natuurlijk. Er is geen reden om dit niet te willen fixen.

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hij werkt inderdaad met +3 days..
Maar nu krijg ik dit weer.. Pffff

Eerst volgende afhaaldag: Tuesday 19 January 2016
Catchable fatal error: Object of class DateTime could not be converted to string in /home/betuwsbeste/public_html/test1.php on line 20

Code nu:

<strong>Eerst volgende afhaaldag:</strong> <?php
$dag = array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");
$dag2 = array("Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag");

$maand = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
$maand2 = array("Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December");

$date = new DateTime('+3 days');
$date->modify('next tuesday');
echo $date->format('l d F Y');
$date = str_replace($dag, $dag2, $date);
$date = str_replace($maand, $maand2, $date);

echo $date;
?> tussen 16.30 en 19.30 uur.

[ Voor 59% gewijzigd door Verwijderd op 11-01-2016 15:50 ]


Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Neall, gebruik code-tags:

[code=php] $foo = $bar; [/code]

Dat geeft:
PHP:
1
$foo = $bar;


Dat leest een heel stuk prettiger voor iedereen :)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 17:41
PHP:
1
2
3
4
5
$date = new DateTime('+3 days');
$date->modify('next tuesday');
$date = $date->format('l d F Y');
$date = str_replace($dag, $dag2, $date);
$date = str_replace($maand, $maand2, $date);

Je doet nu echo $date->format('..') en gaat dan verder met het object, je moet er wel een string van maken.
Pagina: 1