| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

12-09-2003, 09:54
|
|
Svenner
Registrierter Benutzer
|
|
Registriert seit: Sep 2003
Beiträge: 35
|
|
Kalenderwoche Datum rausfinden
Hallo,
ich habe folgendes Problem.
Ich möchte gerne eine Select-Box haben, wo die aktuellen Kalenderwochen von dem aktuellen Jahr drin stehen.
Zum Beispiel: 1, 2, 3, 4, 5 ... 50, 51, 52
Das sollte alles untereinander stehen, damit ich eine Zahl mit der Select-Box auswählen kann. Wobei manche Jahre ja auch 53 KW haben.
Das wichtigste ist nun, wenn ich diese Zahl auswähle und auf abschicken klicke, soll auf der nächsten Seite ermittelt werden, von wann bis wann die Kalenderwoche geht.
Beispiel: Ich wähle Kalenderwoche 37 --> die geht vom 10.09.2003-16.09.03
Hat jemand nen Code für so was?
Danke schon mal.
Gruß
Svenner.
|

12-09-2003, 10:00
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Re: Kalenderwoche Datum rausfinden
Zitat:
Original geschrieben von Svenner
Wobei manche Jahre ja auch 53 KW haben.
|
das kriegst du ja leicht raus. du erzeugst dir den 31.12. des jahres als timestamp, und lässt dir dann mit date("W") die wochennummer ausgeben.
dann eine schleife von 1 bis zu dieser wochennummer, um dein select-feld aufzubauen.
für den rest: na ja, überleg dir halt mal was :-)
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

12-09-2003, 10:11
|
|
Svenner
Registrierter Benutzer
|
|
Registriert seit: Sep 2003
Beiträge: 35
|
|
Hi,
gut habe es jetzt wie folgt:
PHP-Code:
<?php
$jahr = date("Y");
$zeit = mktime(0,0,0,12,28,$jahr);
$woche = date("W",$zeit);
echo $woche;
?>
<select name="sec">
<?php
for ($i=1; $i<=$woche; $i++)
{
echo "<option value=$i>$i</option>";
}
?>
</select>
Doch wie ich dann das Datum von der jeweiligen Kalenderwoche (von - bis), die ich ausgewählt habe, bekomme, weiß ich nicht und wäre für Hilfe sehr sehr dankbar.
Svenner.
|

12-09-2003, 10:19
|
|
Titus
PHP Master
|
|
Registriert seit: Jan 2001
Ort: im Rodgau
Beiträge: 4.292
|
|
Montag der Kalenderwoche $woche in Jahr $jahr:
PHP-Code:
$kw1 = mktime(0,0,0,1,4,$jahr); // der 4.1. liegt garantiert in der 1. KW
$montag = $kw1 + 86400 * (
7*($woche-1) // $woche-1 Wochen drauf
- date('w', $kw1)+1 // und Tage bis zum Montag abziehen
);
$sonntag = $montag + 86400*6; // 6 Tage drauf: Sonntag
Dann bekommst du die passenden Daten mit date('d.m.Y', $montag) und date('d.m.Y', $sonntag).
__________________
mein Sport:  mein Frühstück:  meine Arbeit:
Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.
|

12-09-2003, 10:24
|
|
Svenner
Registrierter Benutzer
|
|
Registriert seit: Sep 2003
Beiträge: 35
|
|
ja das ist gut, aber wenn ich jetzt die kw=37 habe, wie bekomme ich einen tag, der in der kw=37 ist raus oder das datum von - bis.
ein einziger tag würde ja nach deinem script her reichen.
danke.
|

12-09-2003, 12:26
|
|
Titus
PHP Master
|
|
Registriert seit: Jan 2001
Ort: im Rodgau
Beiträge: 4.292
|
|
Zitat:
Original geschrieben von Svenner
ja das ist gut, aber wenn ich jetzt die kw=37 habe, wie bekomme ich
einen tag, der in der kw=37 ist raus oder das datum von - bis.
|
Ich weiß nicht, warum ich darauf noch antworte ...
GENAU DAS hab ich doch da oben gepostet!
Ich seh ja ein, dass manche Leute hier keine Ahnung von PHP und noch
weniger Ahnung vom Programmieren haben; aber ich setze voraus, dass
unsere Besucher LESEN können und das auch tun.
__________________
mein Sport:  mein Frühstück:  meine Arbeit:
Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.
|

18-01-2007, 13:18
|
|
strauberry
Registrierter Benutzer
|
|
Registriert seit: Nov 2002
Beiträge: 616
|
|
@Titus: VIELEN DANK FÜR DEIN SCRIPT!!!!!!! Es funktioniert wunderbar :-)
Nur ein kleiner Hinweis: Wenn ein Jahr 53 KWs hat, und man sich genau in dieser KW 53 befindet, muss man bevor man das ganze Script ausführt, KW auf 52 setzen, weil man sonst eine Woche weiter ist. Aber sonst perfekt! 2004/2005, 2005/2006 und 2006/2007 getestet...
Für alle, die nochmal nach dem Thema suchen:
Dass der 4. auf jeden Fall in der ersten KW liegt, ist hier begründet
"(KW ist...) die erste Woche, in die mindestens vier Tage des neuen Jahres fallen (ISO 8601)." (Quelle: wikipedia)
Warum man jetzt hier einen Tag dazu und da einen abzieht habe ich noch nicht 100% kapiert, aber hauptsache, es funktioniert :-)
|

06-01-2009, 20:58
|
|
strauberry
Registrierter Benutzer
|
|
Registriert seit: Nov 2002
Beiträge: 616
|
|
Wenn der 4. ein Sonntag ist (so wie dieses Jahr), muss man 6 abziehen und nicht date('w', $kw1)+1, sonst rutscht das ganze immer eine Woche nach vorn.
|

21-06-2009, 02:23
|
|
einermeiner
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 104
|
|
Hey,
danke für diesen Thread!
Aber, eine Frage:
Wenn man im Falle einer KW 53 das Ganze auf KW 52 ändern muss, was mache ich dann, um in die "echte" KW 52 zu kommen?
Gebe ich dafür dann KW 51 an? Wie komme ich dann in die echte 51 usw.?
Das kann ja nicht funktionieren.
Oder ist das eine "Falschinformation" und es gibt keine Probleme, wenn man den letzten Tipp beachtet mit 6 Tage abziehen wenn der 04. ein Sonntag ist?
Danke
|

21-06-2009, 11:51
|
|
nichtsooft
Registrierter Benutzer
|
|
Registriert seit: Apr 2006
Ort: Wien [AUT]
Beiträge: 383
|
|
Gegenfrage: Was ist daran so schwer hier nach "date" zu suchen und das Ergebnis zu lesen!?
__________________
WHILE (!$asleep) { $sheep++; }
|

21-06-2009, 14:17
|
|
jmc
PHP Junior
|
|
Registriert seit: Mar 2006
Beiträge: 868
|
|
Und hier noch eine Veriante, wenn du es manuel machen willst. (testen musst du es selbst  )
PHP-Code:
// returns the UNIX timestamp of the given day of week
function getDayOfWeekasTime($day, $month, $year, $dayOfWeek){
$time = mktime(0, 0, 0, $month, $day, $year);
$time += ($dayOfWeek - (date("w") + 6) % 7) * 3600 * 24;
return $time;
}
// returns false if invalid or
// the first day of the given week as a UNIX timestamp
function getWeekasTime($week, $year){
if($year < 1980 || $year > 2030 || $week < 0 || $week > 52){return false;}
$time = getDayOfWeekasTime(4, 1, $year, 3);
$time += 7 * 24 * 3600 * $week;
d.setDate(d.getDate() + 7 * week);
if($week == 52 && $year != date("Y", $time)){
return false;
}
return $time -= 3 * 24 * 3600;
}
// returns the calendar week 0-52 of a given date
function getCalendarWeek($day, $month, $year){
$calendarWeek = 0;
$time = getDayOfWeekasTime($day, $month, $year, 3);
$year = date("Y", $time);
while($year == date("Y", $time){
$calendarWeek++;
$time -= 7 * 24 * 3600;
}
if(date("Y", getDayOfWeekasTime($day, $month, $year, 3)) != $year){
if($calendarWeek == 0){
$calendarWeek++;
}else if($calendarWeek == 52){
$calendarWeek--;
}
}
return $calendarWeek;
}
|

21-06-2009, 20:47
|
|
einermeiner
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 104
|
|
Zitat:
Zitat von nichtsooft
Gegenfrage: Was ist daran so schwer hier nach "date" zu suchen und das Ergebnis zu lesen!?
|
Ich kenne die Date-Funktion, aber darum geht es nicht.
|

21-06-2009, 21:32
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von jmc
PHP-Code:
(date("w") + 6) % 7)
|
Warum nimmst du nicht einfach date("N")?
ISO-8601 numeric representation of the day of the week
1 (for Monday) through 7 (for Sunday)
|

22-06-2009, 00:45
|
|
jmc
PHP Junior
|
|
Registriert seit: Mar 2006
Beiträge: 868
|
|
Weil ich das direkt hier im Forum geschrieben, nicht lange überlegt und das nicht auswendig gewusst habe
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|