Datumsrechnerei :-)

Ich habe meinen obigen Beitrag inzwischen korrigiert:

Ein Jahr hat 53 Wochen, wenn es an einem Donnerstag beginnt ODER auch an einem Donnerstag endet, ansonsten hat es 52 Wochen.​

Damit ist sie auch für Schaltjahre gültig! -> z.B. Jahr 2004

edit:
Regeln erweitert: Der 4. Januar liegt immer in der ersten Woche des Jahres. Der 28. Dezember liegt immer in der letzten Woche des Jahres. (siehe letzten Beitrag von crack)
 
Zuletzt bearbeitet:
PHP:
<?php

$date = new DateTime();
$date->setISODate('2012', '4');
$date->add(new DateInterval('P7D'));
echo $date->format('W-y');

Bleibt nurnoch das Problem, irgendwie an Jahr und Woche aus dem string ranzukommen. DateTime::createFromFormat() geht leider nicht, weil es das W-Symbol dafür nicht gibt:( super ärgerlich.
 
PHP:
$dateString = "04-12";
$atomized = explode( "-", $dateString );
$timestamp = strtotime('20'.$atomized[1].'W'.$atomized[0]);
# ^ strtotime kann auch mit Kalenderwochen umgehen '2012W04'
$timestamp += 604800;
# einfach mal eine Woche hinzuaddiert
$newDate = date('W-y',$timestamp);
Das ganze in 2 Zeilen:
PHP:
$oldDate = "04-12";

$dt = explode( "-", $oldDate );
$newDate = date('W-y',strtotime('20'.$dt[1].'W'.$dt[0])+604800);

echo $newDate;
mfg chmee
 
@chmee:

Dein Script liefert für

PHP:
 $oldDate = "52-12";

"01-12". Es sollte aber "01-13" rauskommen.

Ansonsten finde ich den Ansatz, die Detailüberlegungen an date() auszulagern elegant. :-)
 
@heinerK:
oOps :) warum macht das php? Dabei klang das alles so logisch :D (Das blöde ist wohl, dass 01-13 noch in 2012 anfängt - was ein Schlamassel) Die Lösung wäre wohl, nicht 7 Tage zu addieren, sondern zB 13 Tage.

mfg chmee
 
Zurück