PHP Datum in der Vergangenheit anzeigen

Cisa

Cadet 2nd Year
Registriert
Okt. 2015
Beiträge
23
PHP:
<?php

echo date("j-M-Y, l");

?>

Gibt ja immer das aktuelle Datum aus, wie bekommt man es hin dass das Datum von vor 2 Wochen angezeigt wird?

Also wenn z.B. echo date("j-M-Y, l") den 01.11.2015 ausgibt, soll anstatt dessen immer der 18.11.2015 gezeigt werden.

Es wäre gut, wenn dass nicht auf den Tag genau ist also nicht täglich wechselt, sondern 1 x wöchentlich alle 7 Tage.

Beispiele:


  1. 01.11.2015 --> 18.10.2015
  2. 02.11.2015 --> 18.10.2015
  3. 03.11.2015 --> 18.10.2015
  4. 04.11.2015 --> 18.10.2015
  5. 05.11.2015 --> 18.10.2015
  6. 06.11.2015 --> 18.10.2015
  7. 07.11.2015 --> 18.10.2015
  8. 08.11.2015 --> 25.10.2015
  9. 09.11.2015 --> 25.10.2015
  10. 10.11.2015 --> 25.10.2015
  11. 11.11.2015 --> 25.10.2015
  12. 12.11.2015 --> 25.10.2015
  13. 13.11.2015 --> 25.10.2015
  14. 14.11.2015 --> 25.10.2015
  15. 15.11.2015 --> 01.11.2015
    ... usw.

Hoffe irgendwann versteht was ich meine...

Weiß jemand wie man das anstellt?

Thx.

:)
 
Google mal nach

strtotime("-1 week")
% Operator
date("U")

Damit solltest du dein Wunschergebnis erreichen :)
 
Weils lustig ist, fällt mir zu dem köstlichen php für ne Woche zurück ein:
echo date("d.m.Y", time() - (7 * 60 * 60 * 24)) ;
Erinnert an "In Time – Deine Zeit läuft ab" ;-)
Wird kommen, sich was zukaufen zu können.
Dann gleich mal 70 000 oder so.
 
Zuletzt bearbeitet:
overflow schrieb:
echo date("d.m.Y", time() - (7 * 60 * 60 * 24)) ;

Da muss man glaube Sommer/Winterzeit im Hinterkopf haben: es ist Tag 100 (oder so, keine Ahnung an welchem Tag auf Sommerzeit umgestellt wird, wegen Sommerzeit hat der Tag nur 23 Stunden), ziehst du jetzt von Tag 101 um eine Minute nach Mitternacht 24h ab bist du bei Tag 99 um 23:01, nicht bei Tag 100 um 00:01.
In der Praxis hat man damit kaum mal Probleme, sicherer ist es aber immer den Tag um 12:00 als Timestamp zu nehmen, dann läuft man da nicht in obskure Bugs:

PHP:
date('d.m.Y', (mktime(12, 0, 0, date('m'), date('d'), date('Y'))-24*60*60*7));

Ich persönlich packe sowas immer ganz gerne in eine eigene Funktion in einer Helferklasse, das braucht man zwar nicht oft aber wenn sich das Problem mal wieder ergibt kann man das schön wiederverwenden und hat dann konsistenten Code.
 
bool date_default_timezone_set ( string $timezone_identifier ) erübrigt Eigenes, wollte ich nur hinzufügen.
PHP hat gute usability eingebaut und bringt einem den PC samt eigenen Startmenus und Dateiexplorer in den browser.
 
overflow schrieb:
bool date_default_timezone_set ( string $timezone_identifier ) erübrigt Eigenes, wollte ich nur hinzufügen.
PHP hat gute usability eingebaut und bringt einem den PC samt eigenen Startmenus und Dateiexplorer in den browser.

Was soll denn das Setzen einer Zeitzone in dem Fall bringen? Versteh ich nicht so richtig :D
 
Danke für eure Antworten!

Bin kein Programmierer und muss daher fragen, funktioniert das bei euch? Wollte das mal auf http://phptester.net/ testen, aber irgendwie kommt da nichts und auf einem Produktivsystem kann ich das gerade nicht testen.
 
Funktionieren schon, aber mein Post war eher als Antwort auf overflow's gemeint.

Du wolltest ja 14 Tage und keinen täglichen Wechsel, da würde ich spontan so etwas machen:

-heutigen Tag bestimmen
-Schleife rückwärts durchgehen bis ich drei mal einen Sonntag passiert habe
-den dann nutzen.

mktime kennst su ja, date('N', Zeitstempel) gibt an welcher Wochentag ein Tag ist, 7 ist Sonntag. 86400 ist ein Tag in Sekunden, den ziehen wir von unserem Startdatum solange ab, bis wir drei mal den Sonntag passiert haben, dann rechhnen wir wieder 86400 drauf um vom Samstag wieder auf unseren Sonntag zu kommen und gut.

Also:
PHP:
<?php
$day =  mktime(12, 0, 0, date('m'), date('d'), date('Y'));
$numberOfSundays = 0;
while($numberOfSundays < 3) {
if(date('N', $day) == 7) {
  $numberOfSundays++;
}
$day -= 86400;
}
	$day += 86400; //(wir ziehen sonst einen Tag zu viel ab)
	echo date('d.m.Y', $day).'<br />';

Wenn du das mal testen willst hier der Code für den PHP Tester, der geht die Tage die du angeführt hattest in einer Schleife durch und gibt dann das Ergebnis dahinter aus.

PHP:
<?php
for($i=1; $i<18; $i++) {
$day =  mktime(12, 0, 0, 11, $i, date('Y'));
$numberOfSundays = 0;
while($numberOfSundays < 3) {
if(date('N', $day) == 7) {
  $numberOfSundays++;
}
$day -= 86400;
}
$day += 86400; 
echo $i.'.11.2015=>'.date('d.m.Y', $day).'<br />';
}

Ergebnis:

1.11.2015=>18.10.2015
2.11.2015=>18.10.2015
3.11.2015=>18.10.2015
4.11.2015=>18.10.2015
5.11.2015=>18.10.2015
6.11.2015=>18.10.2015
7.11.2015=>18.10.2015
8.11.2015=>25.10.2015
9.11.2015=>25.10.2015
10.11.2015=>25.10.2015
11.11.2015=>25.10.2015
12.11.2015=>25.10.2015
13.11.2015=>25.10.2015
14.11.2015=>25.10.2015
15.11.2015=>01.11.2015
16.11.2015=>01.11.2015
17.11.2015=>01.11.2015

BTW: hats einen Grund warum du da ausgerechnet den Sonntag nimmst? Ich hätte da vielleicht eher den Montag genommen ;)

EDIT2: das geht bestimmt auch noch einfacher, ist jetzt nur das erste was mir einfällt -.-
Ergänzung ()

Cisa schrieb:
Danke für eure Antworten!

Bin kein Programmierer und muss daher fragen, funktioniert das bei euch? Wollte das mal auf http://phptester.net/ testen, aber irgendwie kommt da nichts und auf einem Produktivsystem kann ich das gerade nicht testen.

Äh ich seh grad so "kein Programmierer" und "Produktivsystem" in einem Satz, du bist aber vorsichtig mit was immer du da machst? Ich würde mir eher einen Nagel durchs Knie treiben als unverstandenen & ungetesteten PHP Code aus einem Forum online zu stellen :D
 
Zuletzt bearbeitet von einem Moderator:
Danke fürs posten!

mambokurt schrieb:
Äh ich seh grad so "kein Programmierer" und "Produktivsystem" in einem Satz, du bist aber vorsichtig mit was immer du da machst?

Ach, ist ja nur Webspace und ich vertraue dir voll. :) Ich erstelle eigentlich nur statische Informationsseiten.

mambokurt schrieb:
Ich hätte da vielleicht eher den Montag genommen ;)

Stimmt ja, die Woche beginnt Montags... :lol:
Wie kann ich das bitte anpassen?
 
Beim date('N' ...aus der 7 eine 1 machen, das ist quasi der Wochentag als Zahl.

Und anschließend vllt noch $numberOfSundays umbenennen in $numberOfMondays, nur damit sich da später niemand am Kopf kratzt:evillol:

Bei den Amis beginnt die Woche btw Sonntags, also gar nicht so abwegig mit dem Sonntag :)
 
Wenn es ein bisschen objektorientierter sein soll:

PHP:
$date = new \DateTime('2015-11-01');
$date->modify('-21 days');
$date->modify('sunday this week');
echo $date->format('d.m.Y');
 
Datetime hat mir unter PHP 5.3 mal übel ins Bein gebissen, seitdem meide ich das. Wenns natürlich eh nur für eine einzelne Website mit bekannter Umgebung ist geht Datetime genauso ;)
 

Ähnliche Themen

Zurück
Oben