ERLEDIGT
JA
JA
ANTWORTEN
7
7
ZUGRIFFE
3001
3001
EMPFEHLEN
-
29.11.07 16:16 #1
- Registriert seit
- Jan 2004
- Ort
- Feichten (Bayern)
- Beiträge
- 317
Hallo,
hab jetzt schon ne Weile gesucht, jedoch nicht das gefunden was ich brauche.
Ich möchte, wie der Titel schon sagt, einen Timestamp generieren. Und zwar hab ich folgende Vorgaben:
KW 23
Jahr 2008
Wochentag Dienstag
Uhrzeit 12:00:00
Jemand ne Idee? Hab mich auch schon rumgeplagt mit strtotime, jedoch wird da halt das amerikanische Zeitsystem benutzt.
Danke, sc.It doesn't matter how paranoid you are...
...you aren't paranoid enough!
-
Müsste so eigentlich funktionieren:
PHP-Code:$tage = array('Montag' => 1, 'Dienstag' => 2, 'Mittwoch' => 3, 'Donnerstag' => 4, 'Freitag' => 5, 'Samstag' => 6, 'Sonntag' => 7);
$wt = $tage['Dienstag'];
$kw = 23;
$jahr = 2008;
$zeit = '12:00:00';
list($h, $m, $s) = explode(':', $zeit);
$time = mktime($h, $m, $s, 1, 1 + 7*($kw-1), $jahr);
$tmp = date('w', $time);
$tmp = ($tmp == 0) ? 7 : $tmp; // date(w) gibt 0 für Sonntag
$time = $time + 86400*($wt - $tmp); // 86400 = 60 * 60 * 24
-
29.11.07 22:52 #3
Nabend,
das ist nach der internationalen Norm ISO 8601, nach der sich die deutschsprachige Kalender-Industrie ausnahmslos richtet, nicht ganz richtig. Diese besagt nämlich, dass die erste Kalenderwoche diejenige ist, die mindestens 4 Tage des neuen Jahres enthält. Aufgrund dieser Definition kann man sicher sagen, dass der 4. Januar zur ersten Kalenderwoche gehört. Daher kann man den Montag einer bestimmten Kalenderwoche mit folgender Funktion bestimmen:
Das Datum eines gegebenen Tages in einer bestimmten KW kannst du dann so ausfindig machen:PHP-Code:function kalenderwoche($kw, $year) {
$time = strtotime("4 January " . $year);
if (date('w', $time) != 1)
$time = strtotime("last Monday", $time);
$time = strtotime("+" . ($kw - 1) . " weeks", $time);
return $time;
}
GrußPHP-Code:echo date('d.m.Y', strtotime('next Tuesday', kalenderwoche(23, 2008)));
MarvinWer an Telekinese glaubt, hebt bitte meine Hand...
-
29.11.07 23:46 #4
Warum setzt du nicht einfach via setlocale() zumindest LC_TIME auf Deutsch? Das sollte, sofern die korrekten Daten vorliegen (Auf den meisten Linux-Distributionen generell der Fall, bei MS erfahrungsgemäß eine Glückssache), auch zu korrekten Ergebnissen bei der zur Zeit nicht funktionierenden Lösung führen.
-
30.11.07 13:16 #5
- Registriert seit
- Jan 2004
- Ort
- Feichten (Bayern)
- Beiträge
- 317
Danke für die Antworten.
@marvin: Dein Ansatz gefällt mir schon sehr gut, doch wie bring ich da noch die Zeit, z.B. 12:00:00 mit rein?It doesn't matter how paranoid you are...
...you aren't paranoid enough!
-
30.11.07 14:04 #6
Moin,
die Zeit kannst du so noch miteinbringen:
Das liefert dir einen Zeitstempel des ermittelten Datums zu gegebener Uhrzeit.PHP-Code:$datum = date('d.m.Y', strtotime('next Tuesday', kalenderwoche(23, 2008)));
$zeit = '12:00:00';
list($hrs, $mins, $secs) = explode(':', $zeit);
list($d, $m, $y) = explode('.', $datum);
$time = mktime($hrs, $mins, $secs, $m, $d, $y);
maeTimmae: Auf welchen Beitrag bezieht sich deine Aussage?
Schönen Gruß
MarvinWer an Telekinese glaubt, hebt bitte meine Hand...
-
30.11.07 14:32 #7
- Registriert seit
- Jan 2004
- Ort
- Feichten (Bayern)
- Beiträge
- 317
Danke, jetzt funktionierts!
Hier nochmal der komplette Code, falls Ihn jemand braucht (hab noch die deutschen Wochentagsnamen eingebaut):
Gruß,PHP-Code:function kw($tag,$zeit,$kw,$year)
{
$tage=array("Montag"=>"Monday", "Dienstag"=>"Tuesday", "Mittwoch"=>"Wednesday", "Donnerstag"=>"Thursday", "Freitag"=>"Friday", "Samstag"=>"Saturday", "Sonntag"=>"Sunday");
$tag=$tage[$tag];
$time = strtotime("4 January " . $year);
if(date('w', $time) != 1)
{
$time = strtotime("last Monday", $time);
}
$time = strtotime("+" . ($kw - 1). " weeks", $time);
$datum = date('d.m.Y', strtotime('next '.$tag, $time));
list($hrs, $mins, $secs) = explode(':', $zeit);
list($d, $m, $y) = explode('.', $datum);
$time = mktime($hrs, $mins, $secs, $m, $d, $y);
return $time;
}
echo kw("Freitag","14:31:00","48","2007");
sc.It doesn't matter how paranoid you are...
...you aren't paranoid enough!
-
Das wird so nicht ganz funktionieren, da Marvins Funktion kalenderwoche wie von ihm beschrieben den Montag der gesuchten Kalenderwoche zurückgibt. Wenn du von dort aus zum nächsten Montag springst, bist du beim Montag der folgenden Woche. Du könntest die Funktion statt auf "last Monday" auf "last Sunday" zurückspringen lassen, von dort aus passt es wieder. Außerdem kannst du die Uhrzeit auch etwas einfacher anhängen, auch alles mit strtotime möglich:
Das mein Vorschlag so falsch war hätte wirklich nicht sein müssen... ich hab während des Schreibens genau das Problem gehabt, habe mir den Januar 2008 angesehen und dann von einer Stichprobe auf alle anderen Jahre geschlossen. Dass ich weder vernünftig danach gesucht habe, noch dich auf meine Annahme hingewiesen habe ärgert mich jetzt wirklich. Leider lässt sich meine Idee nicht mehr so einfach an dieses Problem anpassen, daher kann ich dir auch nur die Funktion von Marvin empfehlen, sehr schöner Ansatz mit strtotime. Man lernt hier eben nie aus, egal ob als fragender oder als antwortenderPHP-Code:function kw($tag,$zeit,$kw,$year)
{
$tage = array("Montag"=>"Monday", "Dienstag"=>"Tuesday", "Mittwoch"=>"Wednesday", "Donnerstag"=>"Thursday", "Freitag"=>"Friday", "Samstag"=>"Saturday", "Sonntag"=>"Sunday");
$tag = $tage[$tag];
$time = strtotime("4 January " . $year);
$time = strtotime("last Sunday", $time);
$time = $time + ($kw - 1)*7;
return strtotime('next '.$tag.' '.$zeit, $time);
}
echo date('d.m.Y - H:i:s', kw("Donnerstag","14:31:00","1","2011"));
Ähnliche Themen
-
Timestamp von einem Wochentag
Von dkf im Forum PHPAntworten: 4Letzter Beitrag: 21.06.06, 22:42 -
Doppelte DB-Einträge pro Jahr als 1 Eintrag / Jahr zählen.
Von aherzog im Forum PHPAntworten: 1Letzter Beitrag: 18.03.06, 11:58 -
Timestamp nach heutigen Datum, aber beliebiges Jahr, abfragen
Von MM2410 im Forum Relationale DatenbanksystemeAntworten: 5Letzter Beitrag: 23.11.05, 17:39 -
Eingabefeld für Jahr, Monat/Jahr, Tag/Monat/Jahr
Von acky im Forum JavaAntworten: 0Letzter Beitrag: 24.07.05, 16:28 -
$tag $monat $jahr in TIMESTAMP umwandeln
Von gidde im Forum PHPAntworten: 1Letzter Beitrag: 21.02.05, 14:23





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren