Moin,
ich habe hier zwei Uhrzeiten "von" und "bis" und so eine Art Schablone, ebenfalls mit "von" und "bis".
Jetzt möchte ich z.B. wenn in der Schablone steht: 23.00 bis 6.00 ausrechnen, ob und wieviele Stunden/Minuten davon in den eingegebenen Uhrzeiten enthalten sind.
Also z.B. habe ich eingegeben 22.12 - 1.00 Uhr, Schablone drüberlegen (23.00 - 6.00) und ich erhalte dann als Ergebnis 2 Stunden (Also von der eingegebenen Zeit sind 2 Stunden gemäss Schablone enthalten).
Ich habe das zwar hinbekommen, wenn man Zeiten angibt, die von einem in den nächsten Tag überlappen, aber irgendwie kriege ich nichts vernünftiges raus, wenn ich z.b. 0 - 6 eingebe oder 23 - 23.59.
Vielleicht habt Ihr ja eine Idee.
Hier mein bisheriger Code:
ich habe hier zwei Uhrzeiten "von" und "bis" und so eine Art Schablone, ebenfalls mit "von" und "bis".
Jetzt möchte ich z.B. wenn in der Schablone steht: 23.00 bis 6.00 ausrechnen, ob und wieviele Stunden/Minuten davon in den eingegebenen Uhrzeiten enthalten sind.
Also z.B. habe ich eingegeben 22.12 - 1.00 Uhr, Schablone drüberlegen (23.00 - 6.00) und ich erhalte dann als Ergebnis 2 Stunden (Also von der eingegebenen Zeit sind 2 Stunden gemäss Schablone enthalten).
Ich habe das zwar hinbekommen, wenn man Zeiten angibt, die von einem in den nächsten Tag überlappen, aber irgendwie kriege ich nichts vernünftiges raus, wenn ich z.b. 0 - 6 eingebe oder 23 - 23.59.
Vielleicht habt Ihr ja eine Idee.
Hier mein bisheriger Code:
PHP-Code:
// SCHABLONE
$fromNeeded = 23;
$toNeeded = 6;
// EINGETRAGENE ZEIT
$fromDone = 0;
$toDone = 23.12;
$datePrefix = '2007-01-01';
$datePrefix2 = '2007-01-02';
$datePrefix_ = $datePrefix;
$nextDay = $datePrefix;
$nextDay_ = $datePrefix;
// SCHABLONE
// in den nächsten tag reinspringen, falls überlappend
if($toNeeded < $fromNeeded){
$nextDay_ = $datePrefix2;
}
// EINGETRAGENE ZEIT
// in den nächsten tag reinspringen, falls überlappend
if($toDone < $fromDone){
$nextDay = $datePrefix2;
}
// SCHABLONE
// from und to sind jeweils floats, darum das number format hier
$fromNeeded = strtotime($datePrefix_ . ' ' . number_format($fromNeeded, 2, ':', '') . ':00' ) / 60;
$toNeeded = strtotime($nextDay_ . ' ' . number_format($toNeeded, 2, ':', '') . ':00' ) / 60;
// EINGETRAGENE ZEIT
// from und to sind jeweils floats, darum das number format hier
$fromDone = strtotime($datePrefix . ' ' . number_format($fromDone, 2, ':', '') . ':00' ) / 60;
$toDone = strtotime($nextDay . ' ' . number_format($toDone, 2, ':', '') . ':00' ) / 60;
$minCount = 0;
$started = false;
for($mins = $fromDone; $mins <= $toDone ; $mins++){
if($fromNeeded == $mins){
$started = true;
}
if($started){
$minCount++;
}
if($toNeeded == $mins){
$started = false;
}
}
echo $minCount;
Kommentar