2 Datum in Tage via PHP

madirfan

Erfahrenes Mitglied
Hi,

bin auf der suche ein einem PHP Code, wo ich 2 Datum zuammen berechnet werden und der gesammte Tag herauskommt:

Tage zwischen zwei Datumsangaben ermitteln

Beispiel:
01.10.2013 bis 05.10.2015 = 4 Tage

dachte an sowas..
PHP:
<?php
function seDay($begin,$end,$format,$sep)
{	
	$pos1	= strpos($format, 'd');
	$pos2	= strpos($format, 'm');
	$pos3	= strpos($format, 'Y'); 
	
	$begin	= explode($sep,$begin);
	$end		= explode($sep,$end);
	
	$first 	= GregorianToJD($end[$pos2],$end[$pos1],$end[$pos3]);
	$second	= GregorianToJD($begin[$pos2],$begin[$pos1],$begin[$pos3]);
	
	if($first > $second)
		return $first - $second;
	else
		return $second - $first;
	
}
$timeA	= '29.09.2012';
$timeB	= '30.09.2012';
$mozart = seDay($timeA,$timeB,"dmY",".");
echo '<strong>Anz. Tage ' . $mozart . '</strong>';
?>

Dies scheit zwar zu gehen..was ich aber haben möchte ist, dass der Format des Datums
so aussehen sollte:
$timeA = '29/09/2012';
$timeB = '30/09/2012';
 
Zuletzt bearbeitet:
Es geht einfach über das DateTime Objekt
PHP:
$timeA = new DateTime('27.1.1759'); 
$timeB = new DateTime(); 
$diff = $timeB->diff($timeA);
$mozart = $diff->days;
 
Hab das soweit hinbekommen.. aber hab da ein anders problem:

PHP:
<?php printf("%s, %s:%s", $STORAGE['date_from'], $STORAGE['hour_from'], $STORAGE['minutes_from']); ?> | 
<?php printf("%s, %s:%s", $STORAGE['date_to'], $STORAGE['hour_to'], $STORAGE['minutes_to']); ?> | 
                         

<?php
function seDay($begin,$end,$format,$sep)
{    
    $pos1    = strpos($format, 'd');
    $pos2    = strpos($format, 'm');
    $pos3    = strpos($format, 'Y'); 
    $begin    = explode($sep,$begin);
    $end        = explode($sep,$end);
    
    $first     = GregorianToJD($end[$pos2],$end[$pos1],$end[$pos3]);
    $second    = GregorianToJD($begin[$pos2],$begin[$pos1],$begin[$pos3]);
    
    if($first > $second)
        return $first - $second;
    else
        return $second - $first;
    
}
$timeA    = '29/09/2012 ';
$timeB    = '30/09/2012';
$mozart = seDay($timeA,$timeB,"dmY","/");
echo '<strong>Anz. Tage ' . $mozart . '</strong>';
?> |

Habe versucht die Zeit "data from" in $timeA zuhinzufügen:

PHP:
$timeA    = '<?php printf("%s", $STORAGE["date_from"]); ?>';

Leider wird hier aber keine Ergebniss dargestellt..

Ergebniss = Anz. Tage 0

Irgedn eine idee
 
Zuletzt bearbeitet:
Wenn an wüsste was $STORAGE['date_to'] ist.
Und auch was für eine Fehlermeldung erscheint.....

Achja, hast du meine Lösung gesehen? Ist einiges Kürzer und braucht keine Kalenderkonvertationen...

Nachtrag: Fehler gesehen
PHP:
$timeA    =  $STORAGE['date_to'];
 
Das selbe prob hab ich in diesem Script

PHP:
<p><label class="title"><?php echo $PB_LANG['booking_from']; ?></label>
			<?php 
			list($from_date, $from_time) = explode(" ", $tpl['arr']['from']);
			list($from_hour, $from_minute,) = explode(":", $from_time);
			?>
			<input type="text" name="from_date" id="from_date" class="text w80 required pointer datepick" value="<?php echo Util::formatDate($from_date, 'Y-m-d', $tpl['option_arr']['date_format']); ?>" readonly="readonly" rel="<?php echo $week_start; ?>" rev="<?php echo $jqDateFormat; ?>" />
			<?php TimeWidget::hour($from_hour, 'from_hour', 'from_hour', 'select'); ?>
			<?php TimeWidget::minute($from_minute, 'from_minute', 'from_minute', 'select'); ?>
		</p>
		<p><label class="title"><?php echo $PB_LANG['booking_to']; ?></label>
			<?php 
			list($to_date, $to_time) = explode(" ", $tpl['arr']['to']);
			list($to_hour, $to_minute,) = explode(":", $to_time);
			?>
			<input type="text" name="to_date" id="to_date" class="text w80 required pointer datepick" value="<?php echo Util::formatDate($to_date, 'Y-m-d', $tpl['option_arr']['date_format']); ?>" readonly="readonly" rel="<?php echo $week_start; ?>" rev="<?php echo $jqDateFormat; ?>" />
			<?php TimeWidget::hour($to_hour, 'to_hour', 'to_hour', 'select'); ?>
			<?php TimeWidget::minute($to_minute, 'to_minute', 'to_minute', 'select'); ?>
		</p>

Habs damit probiert leider ohne erfolg:

PHP:
$timeA    =  $from_date['date_format'];   
$timeB    =  $to_date['date_format'];
 
Zuletzt bearbeitet:
Irgendwie habe ich das gefühl, dass du keine Ahnung hast was das Script macht.

Wie soll ich dir helfen können?
$from_date['date_format'];
Ein Array $from_date. Ich sehe nicht was da drin steht. Auch sehe ich nicht was du damit machen willst und schon gar nicht sehe ich eine Fehlermeldung oder ide Art des Fehlverhaltens.

[ironie]Es muss die Zeile 13 sein[/ironie]
 
du hast recht... das war bloedsinn...
bin jetzt etwas anders vorgegangen..

hab erstma alles ausgeben lassen von $tpl
PHP:
	<?php
		print_r($tpl);
	?>

das entsprechende Arry reingeholt und uebergeben.. das passt jetzt.. vielen dank nochmals fuer deine tolle hilfe!
 
Hi nochmals,

ich da eine kleine frage:

Die Kalkulation in PHP für 2 Datum schein nicht richtig zu gehen:

Mein Code
PHP:
<?php
function seDay($begin,$end,$format,$sep)
{    
    $pos1    = strpos($format, 'd');
    $pos2    = strpos($format, 'm');
    $pos3    = strpos($format, 'Y'); 
	
    $begin    = explode($sep,$begin);
    $end        = explode($sep,$end);
    
    $first     = GregorianToJD($end[$pos2],$end[$pos1],$end[$pos3]);
    $second    = GregorianToJD($begin[$pos2],$begin[$pos1],$begin[$pos3]);
    
    if($first > $second)
        return $first - $second;
    else
        return $second - $first;
    
}
$timeA    =  $STORAGE['03/10/2013']; 
$timeB    =  $STORAGE['09/10/2013']; 
$mozart = seDay($timeA,$timeB,"dmY","/");
echo '<strong>Anz. Tage ' . $mozart . '</strong>';
?> | </font>


$timeA = $STORAGE['03/10/2013'];
$timeB = $STORAGE['09/10/2013'];

Ich bekomme da Anzahl der Tage "6"
Es sollten aber 7 sein.

ALso 6 tage +1 Tag..

Was stimmt da nicht im Code?
 
Zuletzt bearbeitet:
Zurück