tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
3001
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #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!

  2. #2
    Papier Papier ist offline Mitglied Bronze
    Registriert seit
    Jul 2003
    Beiträge
    43
    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$s17*($kw-1), $jahr);

    $tmp date('w'$time);
    $tmp = ($tmp == 0) ? $tmp// date(w) gibt 0 für Sonntag

    $time $time 86400*($wt $tmp); // 86400 = 60 * 60 * 24 
     

  3. #3
    Avatar von Marvin Schmidt
    Marvin Schmidt Marvin Schmidt ist offline Mitglied Gold
    Registriert seit
    Jul 2004
    Ort
    Sparrieshoop (Schleswig-Holstein)
    Beiträge
    208
    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:
    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;

    Das Datum eines gegebenen Tages in einer bestimmten KW kannst du dann so ausfindig machen:
    PHP-Code:
    echo date('d.m.Y'strtotime('next Tuesday'kalenderwoche(232008))); 
    Gruß
    Marvin
     
    Wer an Telekinese glaubt, hebt bitte meine Hand...

  4. #4
    Avatar von maeTimmae
    maeTimmae maeTimmae ist offline Mitglied Platin
    Registriert seit
    Aug 2007
    Ort
    Erfurt, Saarbrücken, Leipzig und Fulda
    Beiträge
    515
    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.
     

  5. #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!

  6. #6
    Avatar von Marvin Schmidt
    Marvin Schmidt Marvin Schmidt ist offline Mitglied Gold
    Registriert seit
    Jul 2004
    Ort
    Sparrieshoop (Schleswig-Holstein)
    Beiträge
    208
    Moin,
    die Zeit kannst du so noch miteinbringen:
    PHP-Code:
    $datum date('d.m.Y'strtotime('next Tuesday'kalenderwoche(232008)));
    $zeit '12:00:00';
    list(
    $hrs$mins$secs) = explode(':'$zeit);
    list(
    $d$m$y) = explode('.'$datum);
    $time mktime($hrs$mins$secs$m$d$y); 
    Das liefert dir einen Zeitstempel des ermittelten Datums zu gegebener Uhrzeit.

    maeTimmae: Auf welchen Beitrag bezieht sich deine Aussage?

    Schönen Gruß
    Marvin
     
    Wer an Telekinese glaubt, hebt bitte meine Hand...

  7. #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):
    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"); 
    Gruß,
    sc.
     
    It doesn't matter how paranoid you are...
    ...you aren't paranoid enough!

  8. #8
    Papier Papier ist offline Mitglied Bronze
    Registriert seit
    Jul 2003
    Beiträge
    43
    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:

    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);
        
    $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")); 
    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 antwortender
     

Ähnliche Themen

  1. Timestamp von einem Wochentag
    Von dkf im Forum PHP
    Antworten: 4
    Letzter Beitrag: 21.06.06, 22:42
  2. Antworten: 1
    Letzter Beitrag: 18.03.06, 11:58
  3. Timestamp nach heutigen Datum, aber beliebiges Jahr, abfragen
    Von MM2410 im Forum Relationale Datenbanksysteme
    Antworten: 5
    Letzter Beitrag: 23.11.05, 17:39
  4. Antworten: 0
    Letzter Beitrag: 24.07.05, 16:28
  5. Antworten: 1
    Letzter Beitrag: 21.02.05, 14:23