Aus der Nummer des laufenden Tages das Datum ermitteln?

preko

Erfahrenes Mitglied
Hi,

ich habe z. B. die Nummer des heutigen Tages (139) innerhalb des Jahres und möchte daraus das entsprechende Datum generieren lassen - in diesem Falle: 19. Mai 2015 (ist quasi der umgekehrte Weg zu date('z')).

Ich habe Dateien, die ich zur Verfügung gestellt bekomme mit der Bezeichnung "2015139.txt" welche das Jahr (2015) und den Jahrestag (139) als Nummer darstellen.
Für eine Auswahlfunktion müsste ich zwecks besserer Nachvollziehbarkeit für die Benutzer neben der Datei das entsprechende Datum ausweisen, damit die wissen, zu welchem Datum die Datei tatsächlich gehört. Die wenigsten können mit einer fortlaufenden Tagesnummer etwas anfangen.

Hat jemand einen Ansatz für mich?

Beste Grüße!
 
PHP:
function daystotime( $days, $year ) {
  $timestamp = strtotime( sprintf( '01-01-%d', $year ) );
  return ( $timestamp + ( $days - 1 ) * 86400 );
}

var_dump( date( 'd.m.Y', daystotime( 139, 2015 ) ) );
 
PHP:
$dt = mktime(0, 0, 0, 1, $z+1, $Y);
Wobei $z dem date('z') entspricht und $Y dem date('Y')

date('z') beginnt bei 0. Darim muss für mktime noch 1 dazugezählt werden, damit der Tag 0 dem 1.1. entspricht
 
Ich bin etwas verwirrt, Yaslaw, denn Deine Lösung bringt zwar ein ähnliches Ergebnis, allerdings zeigt es den Tag danach (also von heute ausgehend den 20. Mai 2015) an.
 
Hi,

@einfach_nur_crack: Also jeden Tag mit 86400 Sekunden fix zu rechnen ist böse. Wie siehts da bei einer Zeitumstellung aus? Vielleicht bekommst du von daher ein anderes Ergebnis?

Grüsse,
BK
 
Wenn du PHP >= 5.3 nutzt geht es auch mit der DateTime-Klasse

PHP:
$datediff = new DateInterval( 'P1D' );
$date = DateTime::createFromFormat('Yz', '2015139');
$date ->sub( $datediff );

Der 1 Tag Differenz muss abgezogen werden, da 'z' bei 0 beginnt und nicht bei 1.
 
@Yaslaw & @einfach nur crack:
https://www.tutorials.de/members/einfach-nur-crack.179640/
Vielen Dank an Euch beiden!!!
Die Kombination aus "Yaslaws" Vorschlag und "einfach nur cracks" Kommentar dazu hat's gebracht - you made my day!!!

Die Lösung, die nun bei mir funktioniert lautet:
PHP:
$z = 140;         // Fortlaufende Nummer des heutigen Tages (20.05.2015)
$Y = 2015       // Jahreszahl, in der $z liegt

$dt = mktime(0, 0, 0, 1, $z, $Y);
$dateComplete = date('d.m.Y', $dt);
echo $dateComplete;
 
Zurück