PHP date weekdag

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ernesto Bleijenberg

Ernesto Bleijenberg

30/12/2013 22:05:02
Quote Anchor link
Hallo,

Ik ben op zoek naar een mogelijkheid in PHP om de datum van elke donderdag 21:00 weer te geven. Nu heb ik gekeken bij PHP date, alleen hier kan ik niets nuttigs vinden hiervoor. Het moet zo worden:

Totaal:
020120142100
PHP date:
Quote:
echo date('d m y 2100');


Alleen het werkt niet en hoe moet ik de datum van alleen donderdag om 21:00u ophalen? Via een if or else code?

kan iemand mij hier mee helpen? Alvast bedankt!
 
PHP hulp

PHP hulp

26/11/2024 21:25:18
 
Frank Nietbelangrijk

Frank Nietbelangrijk

30/12/2013 22:56:09
Quote Anchor link
klein opzetje om de datum van de aankomende donderdag te verkrijgen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php

$startdate
= new DateTime('now');

$daynr = $startdate->format('w');

$daysdiff = 4 - $daynr; // donderdag is dag 4

if($daysdiff < 0)
    $daysdiff += 7;

$nextThursday = $startdate->add(new DateInterval('P'.$daysdiff.'D'));

echo $nextThursday->format('d-m-Y');
?>
 
- SanThe -

- SanThe -

30/12/2013 23:03:04
Quote Anchor link
Dit 020120142100 is geen datum, daar kan je niks mee.
Een datum is YYYYMMDDHHiiss
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

30/12/2013 23:13:01
Quote Anchor link
Maar 020120142100 is wel een datum, probeer maar:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo date('d-m-Y hh:mm:i', 020120142100);
?>

Alleen niet diegene die je verwacht ;-)
 
- Ariën  -
Beheerder

- Ariën -

31/12/2013 00:10:00
Quote Anchor link
Is het goed dat ik dat dat in plaats van een datum het een misvormde 'Unix Epoch timestamp' noem? ;-)

Quote:
19-09-2038 1111:0909:36
 
Bodi Boele

Bodi Boele

31/12/2013 00:17:08
Quote Anchor link
Naar mijn idee is het het makkelijkst om de functie omd e dagen in cijfers weer te laten geven (die date heeft) zondag 7 is en maandag 1 geloof ik. Dus in code iets van:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$dag
= date('N');
$tijd = date('G');
$minuten = date('i');

If (($dag == 4) && ($tijd == 21) && ($minuten == 00)){
// wat er moet gebeuren
}


Else { echo "het is niet donderdag, 21.00 uur"; }

?>

http://www.w3schools.com/php/func_date_date.asp
Gewijzigd op 31/12/2013 00:18:24 door Bodi Boele
 
- SanThe -

- SanThe -

31/12/2013 00:17:24
Quote Anchor link
Komt dat er bij jou uit Aar?

Bij mij 14-08-1902 0404:0808:28
 
- Ariën  -
Beheerder

- Ariën -

31/12/2013 00:20:55
Quote Anchor link
Kleine snippets test ik vaak in een eval-omgeving uit:
http://3v4l.org/28MAV ;-)

Benieuwd waar het verschil in zit.. Windows misschien? Eens testen...
Gewijzigd op 31/12/2013 00:21:37 door - Ariën -
 
Bodi Boele

Bodi Boele

31/12/2013 00:22:11
Quote Anchor link
Aar, komt dat niet door de kleine script veranderingen zodat wij data's langer kunnen opslaan??
 
- Ariën  -
Beheerder

- Ariën -

31/12/2013 00:25:41
Quote Anchor link
Denk het niet. Mijn Windows 7 zegt dit:
Quote:
14-08-1902 0505:0808:08

Het komt in de buurt, maar we weten waar het verschil vandaan komt. Het getal is ook geen fatsoenlijke UNIX-epoch, maar desondanks krijg je er wel per OS verschillende grappige onrealistische resultaten voor terug.
 
- SanThe -

- SanThe -

31/12/2013 00:31:54
Quote Anchor link
Die eerste snap ik niet maar deze die je nu laat zien staat in een andere tijdzone zo te zien.
 
Erwin H

Erwin H

31/12/2013 00:54:19
Quote Anchor link
Het verschil zit hem in het bereik van de integer waardes in php (welke afhankelijk is van het OS). 020120142100 is namelijk een octaal getal (het begint met een 0) en zal als je het omzet naar een decimale integer net voorbij het bereik van een 4 byte integer gaan.

Testje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$var
= 020120142100;
echo (int)$var.'<br>';
echo date( 'd-m-Y hh:mm:i', $var ).'<br>';
echo PHP_INT_SIZE.' '.PHP_INT_MAX;
?>


Op mijn lokale windows machine:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
-2126461888
14-08-1902 0404:0808:08
4 2147483647


Op mijn linux server:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
2168505408
19-09-2038 1010:0909:36
8 9223372036854775807
Gewijzigd op 31/12/2013 00:55:17 door Erwin H
 
Ivo P

Ivo P

31/12/2013 13:24:03
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$datum
= new datetime(); // evt timezone vermelden

while($datum->format('Y') == 2014)
{

   $datum->modify('next thursday');
   echo $datum->format('Y-m-d 21:00');
}

?>
Gewijzigd op 31/12/2013 13:24:32 door Ivo P
 
Kris Peeters

Kris Peeters

31/12/2013 13:25:03
Quote Anchor link
Dat script werkt pas vanaf morgen :)
 
Ivo P

Ivo P

31/12/2013 13:26:25
Quote Anchor link
<= 2014 dan maar...

:-)
 
Ernesto Bleijenberg

Ernesto Bleijenberg

31/12/2013 14:23:30
Quote Anchor link
Ivo P op 31/12/2013 13:24:03:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$datum
= new datetime(); // evt timezone vermelden

while($datum->format('Y') == 2014)
{

   $datum->modify('next thursday');
   echo $datum->format('Y-m-d 21:00');
}

?>




Nu wil ik de vorige donderdag hebben, en heb dus next veranderd in previous. Alleen nu krijg ik duizenden datums, en ik wil alleen maar de eerste want dat is de goede. Hier de eerste 4 die ik krijg, van de duizenden.
Quote:
2013-12-26 21:002013-12-19 21:002013-12-12 21:002013-12-05 21:00

Het dikgedrukte stukje moet ik hebben, hoe kun je dit het beste oplossen?
 
Ivo P

Ivo P

31/12/2013 14:36:32
Quote Anchor link
hoeveel moet je er hebben?

ik ging in mijn script uit van "alle in 2014"
Dat wordt in regel 4 bepaald: jaar == 2014

Als je vanaf nu achteruit wilt, dan moet je ook op de een of adere manier opgeven wat je eindpunt gaat zijn.
Of als het er maar 1 is: dan heb je natuurlijk geen while-lus nodig en vervallen de regels 4,5 en 8
 
Kris Peeters

Kris Peeters

31/12/2013 14:37:43
Quote Anchor link
Ernesto Bleijenberg op 31/12/2013 14:23:30:
Nu wil ik de vorige donderdag hebben, en heb dus next veranderd in previous.


Okay, wat je PHP vraagt, is vorige donderdag, dan de donderdag daarvoor, dan die daarvoor, dan die daarvoor ... en dan stopt pas wanneer we later zijn dan 2014.

Dan kan je inderdaad oneindig blijven zoeken.

Zo werkt een lus nu eenmaal.


Wil je enkel 1 waarde, bv. vorige donderdag, dan mag die ->modify() niet binnen de while staan.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

31/12/2013 14:39:13
Quote Anchor link
Dan wordt het daynr - 4, net andersom dus en idd. sub()
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php

$startdate
= new DateTime('now');

$daynr = $startdate->format('w');

$daysdiff = $daynr - 4; // donderdag is dag 4 nu $daynr - 4; ipv 4 - $daynr;

if($daysdiff < 0)
    $daysdiff += 7;

$prevThursday = $startdate->sub(new DateInterval('P'.$daysdiff.'D')); // nu sub() in plaats van add()


echo $prevThursday->format('d-m-Y') . ' ' . $prevThursday->format('dmY2100') . '<br>';

?>
Gewijzigd op 31/12/2013 14:42:56 door Frank Nietbelangrijk
 
Ernesto Bleijenberg

Ernesto Bleijenberg

31/12/2013 14:42:32
Quote Anchor link
Ivo P op 31/12/2013 14:36:32:
hoeveel moet je er hebben?

ik ging in mijn script uit van "alle in 2014"
Dat wordt in regel 4 bepaald: jaar == 2014

Als je vanaf nu achteruit wilt, dan moet je ook op de een of adere manier opgeven wat je eindpunt gaat zijn.
Of als het er maar 1 is: dan heb je natuurlijk geen while-lus nodig en vervallen de regels 4,5 en 8


Het werkt nu, ik heb de while lus verwijderd en krijg nu de datum van afgelopen donderdag. Enorm bedankt!
 



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.