Home | Registrieren | Einloggen | Suchen | Aktuelles


Forum » PHP & MySQL » Kalenderdatum berechnen Antworten
Kalenderdatum berechnen

neueinsteiger
Pixelschubser


Beiträge: 2


Hallo zusammen,
ich habe folgendes Problem:

Ich möchte vom aktuellen Datum aus den 1.ten Freitag im nächsten Montag berechnen lassen.

Wie stelle ich das an?

Danke für Eure Hilfe

  Profil   Editieren   Zitieren

raiserle
Fachidiot


Beiträge: 144


angenommen das du dich vertippt hast und es monat sein sollte
normalerweise sollte man das selber hinbekommen.
date()
als anleitung:
1. finde erstmal den nächste monat date()
2. nun finde den erste tag des nächste monats mktime()
3. nun überprüfst du, welcher wochentag der laut 2. errechnete ist date()
4. nun sollte man noch wissen, wieviel seconds ein tag hat
5. nun noch schnell nen switch und ein bisschen rechnen ....

fals du laut der anleitung nicht klar kommst, dann beschäftige dich erstmal mit kontrollstrukturen und schreib dir auf nen schönen großen zettel, was du überhaupt machen willst.
welche werte du brauchst, welche werte dir php bietet und wie du mit simpler mathe auf die lösung kommst.

ist nicht böse gemeint, nur wenn ich dir hier den quellcode poste, bringt dir das auch nichts. die 5 punkte oben sind genau so angelegt, dass wenn du sie abarbeitest, dir immer genau der 1. freitag im nächste monat angezeigt wird.

aber aufpassen. es wird nicht abgefangen ob der monat 12 ist ;) und dann poste doch wenigstens mal deinen lösungsansatz, damit man dir sagen kann, wo du verkehrt ansetzt.

gruß raiserle

---
Irren is Menschlich

Wer andern eine Grube gräbt,
sollte darüber nachdenken,
ob sie tief genug ist!!!!

Kameradschaft ist, wenn der
Kamerad schafft !!!!

  Profil   E-Mail   Website   Editieren   Zitieren

chip
Quasselstrippe


Beiträge: 391


Möglich wäre auch strtotime() und ein bisschen Mathematik!

---

  Profil   Website   Editieren   Zitieren

neueinsteiger
Pixelschubser


Beiträge: 2


Ich habe eine Lösung gefunden.
Auch das Problem mit dem darauffolgenden Jahr glaube habe ich gelöst.

Hier meine Lösung:
<?php
//Nächsten Monat ermitteln
//Monatszahl und Jahr finden
$heute=getdate();
$nmonat= date('n', mktime(0, 0, 0, date("m")+1, date("d"), date("Y")));
$year="$heute[year]";
if ($nmonat==1)
{
$year="$heute[year]"+1;
}

//Wochentag ermitteln
for ($i=1; $i<8; $i++)
{
if (date('w',mktime(0, 0, 0, $nmonat, $i, $year))==5)
{
$tag=$i . "." . $nmonat . "." . $year;
}
}
?>

Folgende Frage noch:
Wie kann ich aus einer For-Schleife vorzeitig aussteigen?

  Profil   Editieren   Zitieren

raiserle
Fachidiot


Beiträge: 144


eh nee nicht mit nem schleifchen... das ist ja, als würde man mit riesenwumme auf
schmetterlinge ballern

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
$next_month=date("m")+1;
$first_day_in_next_month_in_seconds=mktime(0,0,0,($next_month >12 ? 1 : $next_month),1,($next_month>12 ? (date("Y")+1) : date("Y")));
$first_weekday=date("w",$first_day_in_next_month_in_seconds);
$seconds_per_day=86400;
switch ($first_weekday)
{
	case 5 :	$next_friday=$first_day_in_next_month_in_seconds;
				break;// es ist freitag
	case 6 :	$next_friday=$first_day_in_next_month_in_seconds+(6*$seconds_per_day);
				break;
	case 0 :	$next_friday=$first_day_in_next_month_in_seconds+(5*$seconds_per_day);
				break;
	case 1 :	$next_friday=$first_day_in_next_month_in_seconds+(4*$seconds_per_day);
				break;
	case 2 :	$next_friday=$first_day_in_next_month_in_seconds+(3*$seconds_per_day);
				break;
	case 3 :	$next_friday=$first_day_in_next_month_in_seconds+(2*$seconds_per_day);
				break;
	case 4 :	$next_friday=$first_day_in_next_month_in_seconds+$seconds_per_day;
				break;
}
echo "Das Datum für den nächsten Freitag im nächsten Monat ist: <b>".date("d.m.Y",$next_friday)."</b>";
?>


und die m>12 ist auch abgefangen

eine schleife ist absolut unnütz, bei dem switch wird nix gezählt
und auch nix immer wieder verglichen... was zwar eben bei der schleife nicht grad sehr performance- raubend wäre... aber trotzdem eben unnütz.

ich geb dir dann zwar recht, das ich mehr code hingewurschtelt habe... aber lieber mehr zeichen..

und in einer while wäre es auch einfach die abbruchbedingung dazuzunehmen, wenn eben date("w",$stamp)==5 wäre

1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9:
<?php
$found=false;
$i=1;
while($i<=7 && false===$found)
{
    if(date("w",$stamp)==5)
        $found=true;
}
?>


gruß raiserle

---
Irren is Menschlich

Wer andern eine Grube gräbt,
sollte darüber nachdenken,
ob sie tief genug ist!!!!

Kameradschaft ist, wenn der
Kamerad schafft !!!!

  Profil   E-Mail   Website   Editieren   Zitieren

chip
Quasselstrippe


Beiträge: 391


raiserle schrieb am 20.05.2007 21:35
und in einer while wäre es auch einfach die abbruchbedingung dazuzunehmen, wenn eben date("w",$stamp)==5 wäre

1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9:
<?php
$found=false;
$i=1;
while($i<=7 && false===$found)
{
    if(date("w",$stamp)==5)
        $found=true;
}
?>



Wenn wir schon beim Thema Performance sind, dann lass doch diese komische $found-Variable weg. Ein einfaches break; hätte es auch getan, dann muss nicht jedesmal zu Schleifenbeginn die zweite Bedingung noch geprüft werden.


---

Diese Nachricht wurde geändert von: chip
  Profil   Website   Editieren   Zitieren

Mondschatten
Quasselstrippe


Beiträge: 238


Hallo Ihr Tüftler,

mal eine Frage: Wäre das alles nicht viel einfacher möglich mit der Funktion strtotime?

strtotime ( string time [, int now])

Wenn ich in der Variable now den Timestamp des Monatsanfangs übergebe und schließlich als time einfach 'first friday' angebe, müsste ich doch als Ergebnis den Timestamp des ersten Freitags ausgehend vom übergebenen Monatsanfang erhalten - oder?

Liebe Grüße
Mondschatten


---
Schwarz kann auch glänzen.

  Profil   Website   Editieren   Zitieren

chip
Quasselstrippe


Beiträge: 391


Mondschatten schrieb am 21.05.2007 20:24
Hallo Ihr Tüftler,

mal eine Frage: Wäre das alles nicht viel einfacher möglich mit der Funktion strtotime?

strtotime ( string time [, int now])

Wenn ich in der Variable now den Timestamp des Monatsanfangs übergebe und schließlich als time einfach 'first friday' angebe, müsste ich doch als Ergebnis den Timestamp des ersten Freitags ausgehend vom übergebenen Monatsanfang erhalten - oder?

Liebe Grüße
Mondschatten


Wenn ich mich mal selbst zitieren darf :

chip schrieb am 20.05.2007 18:17
Möglich wäre auch strtotime() und ein bisschen Mathematik!


Mathe ist auf jeden Fall nötig, denn er möchte ja nicht den ersten Freitag in diesem Monat, sondern den im nächsten!

---

  Profil   Website   Editieren   Zitieren

Mondschatten
Quasselstrippe


Beiträge: 238


Huhu chip!

chip schrieb am 22.05.2007 15:25
Mathe ist auf jeden Fall nötig,


...auch wenn ich
1:
strtotime('next month')
verwende?

Viele Grüße
Mondschatten


---
Schwarz kann auch glänzen.

  Profil   Website   Editieren   Zitieren

chip
Quasselstrippe


Beiträge: 391


Wird ihm IMHO wenig nützen, denn es gibt meines Wissens keine Angabe, die ihm den ersten Freitag im nächsten Monat ausgibt, sondern nur den nächsten Freitag oder den heutigen Tag im nächsten Monat oder andere Kombinationen.
Also ist Mathe doch nötig

---

  Profil   Website   Editieren   Zitieren

Mondschatten
Quasselstrippe


Beiträge: 238


Okay, ich gebe mich einstweilen geschlagen.

Viele Grüße
Mondschatten

---
Schwarz kann auch glänzen.

  Profil   Website   Editieren   Zitieren
 

Antworten
Nach oben