Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Kalenderwoche aus Datum [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Kalenderwoche aus Datum


 
solaris
23-04-2002, 07:11 
 
Hallo zusammen,

wie kann ich die aktuelle KW aus einem Datum ermitteln ?

Ich habe eine Tabelle (mysql), in der ich die ersten drei Spalten habe:

KW, von, bis

Nun will ich, dass das Datum heute verwendet wird, um die KW zu ermitteln und somit die richtige Zeile in der Tabelle ausgelesen wird.

Ich hab es schon mit einem Select versucht, doch stimmt was mit den Operatoren nicht, denn die Option

SELECT ....... WHERE ´von´ < $Variable ans ´bis´> $Variable

geht nicht. $Variable ist das aktuelle Datum in YYYY-MM-DD Fomat.
In der Spalte von und bis sind auch Datumswerte in diesem Format. Der Datentyp ist Date.

Fazit:

Ich will vergleichen, in welche KW das heutige Datum paßt und diese Zeile dann auslesen. Und dazu:
Der Eintrag in der Spalte bis ist identisch mit dem nächsten von.
Ist das Datum also gleich bis müssen 2 Zeilen ausgelesen werden.


Tabelle KW

KW | von | bis | Text
----------------------------------------------------------------------
19 | 2002-04-08 | 2002-04-15 | blabla
20 | 2002-04-15 | 2002-04-22 | xyz
...
(nur Bsp, KW sind nicht richtig)

Sagen wir, heute ist der 18.04.2002, dann soll die Zeile mit
KW 20 ausgelesen werden (da zwischen 15. und 22.04.2002)
Am 15.04.2002 jedoch beide Zeilen (da in zwei Zeilen vorhanden).

Kann mir jemand helfen ??


Solaris

 
Titus
23-04-2002, 08:39 
 
in mysql gibt es eigene Parameter für die Funktion date_format:

%u Week (0..53), where Monday is the first day of the week
%v Week (1..53), where Monday is the first day of the week. Used with '%x'
%x Year for the week, where Monday is the first day of the week, numeric, 4 digits, used with '%v'

Seit PHP 4.1.0 hat auch die Funktion date (http://www.php3.de/de/date) einen entsprechenden Parameter, der dem oben angegebenen %u entspricht:

Mit date('W', $time) (großes W!) bekommst die ISO6801-Wochennummer des angegebenen Zeitpunkts, das entspricht der Europäischen Kalenderwoche - mit einer Ausnahme: Daten die zur letzten Kalenderwoche des vorherigen Jahres gehören, liefern die 0 zurück; in dem Fall solltest du dann die KW des 31.12. des Vorjahres ermitteln.$t = mktime(0,0,0,$m,$d,$y);
$j = $y;
if (0==($kw=date($t, 'W')))
{
$kw = 1+date($t-68400*date('w', $t), 'W');
$j--;
}
echo "Der $d.$m.$y liegt in der Kalenderwoche $kw/$j";

Mit einem kleinen Trick wird die letzte KW der Vorwoche ermittelt: $t-68400*date('w',$t) liefert den Sonntag (also den letzten Tag) der Vorwoche. Eins auf das Ergebnis draufgerechnet, und die korrekte Kalenderwoche ist ermittelt. Anschließend wird noch die Jahreszahl dementsprechend korrigiert, und das Ergebnis kann verarbeitet werden.

 
solaris
23-04-2002, 08:55 
 
Danke Titus,

ich probiere das sofort aus, wenn ich zuhause bin.

Solaris

 
ediel
23-04-2002, 09:21 
 
Hallo,

mit PHP 4.0.6

habe ich so gemacht:

<?php
$Jahr=$wo; // z.B. $wo = 2001 oder 2002
$selopt="";

// heute definieren
$heute['tag'] = 1; // 1
$heute['monat'] = 1; // Januar
$heute['jahr'] = $Jahr; // Jahr
$heute['tageswert'] = date("w",mktime(0,0,0,1,1,$Jahr))-1; // Tag der Woche
$heute['monatstage'] = date("t",mktime(0,0,0,1,1,$Jahr)); // Anzahl der Tage des Monats

// tage vormonat ermitteln

$vorjahr = $heute['jahr'];
$vormonat = $heute['monat'] - 1;
if ($vormonat < 1)
{
$vormonat = 12;
$vorjahr=$vorjahr-1; // Vorjahr
}

$tage_vormonat = date("t",mktime(12,12,12,$vormonat,1,$vorjahr));

// wochenstart ermitteln;
$a_tag = $heute['tag'] - $heute['tageswert'];
$a_monat = $heute['monat'];
$a_jahr = $heute['jahr'];

if ($a_tag < 1)
{
$a_tag = $tage_vormonat + $a_tag;
$a_monat = $vormonat;
$a_jahr = $vorjahr;
}

for($x=1;$x<53;$x++)
{
// woche definieren
for ($i=0; $i<7; $i++)
{
$wochentag[$i] = date("d.m.Y",mktime(12,12,12,$a_monat,$a_tag,$Jahr));
$heute['monatstage'] = date("t",mktime(0,0,0,$a_monat,$heute['tag'],$Jahr));
$a_tag++;
if ($a_tag > $heute['monatstage'])
{
$a_tag = 1;
$a_monat++;
if ($a_monat > 12)
{
$a_monat = 1;
$a_jahr++;
}
}
}
$selopt.="<option value='$x'>$wochentag[0]-$wochentag[6]";
}
?>

Und dann bei <select> echo $selopt. </select> z.B. zum Auswahl
in HTML ausgeben.

Viel Spaß

Gruß

ediel

 
Titus
23-04-2002, 11:42 
 
Hier ist mein altes date('W'):
function kalwo($t)
{
$w = date('w', $t);
$z = date('z', $t);
$wjan4 = (367+$w-$z)%7;
return (int)(1+($z-3+$wjan4)/7)-!$w+!$wjan4;
}erweitert um Anpassung bei KW=0:function kalwo2($t)
{
$y = date('Y', $t);
$w = date('w', $t);
$z = date('z', $t);
$wjan4 = (367+$w-$z)%7;
$kw = (int)(1+($z-3+$wjan4)/7) - !$w + !$wjan4;
if (!$kw)
{
$y--;
$kw = 52 + (int)(1==$wjan4 ||
(!$wjan4 && 29==date('t', mktime(0,0,0,2,1,$y))));
}
return "$kw/$y";
}


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:16 Uhr.