2008-11-10 4 views

Antwort

76

php unterstützt c Stil Datumsfunktionen. Sie können Datumsperioden mit englischen Sprachsätzen über die Funktion strtotime hinzufügen oder subtrahieren. Beispiele ...

$Today=date('y:m:d'); 

// add 3 days to date 
$NewDate=Date('y:m:d', strtotime("+3 days")); 

// subtract 3 days from date 
$NewDate=Date('y:m:d', strtotime("-3 days")); 

// PHP returns last sunday's date 
$NewDate=Date('y:m:d', strtotime("Last Sunday")); 

// One week from last sunday 
$NewDate=Date('y:m:d', strtotime("+7 days Last Sunday")); 
+0

mit der Funktion strtotime() ist sehr teuer und wäre massiv Overkill, wenn Sie nur ein paar Tage hinzufügen möchten. – nickf

+10

Klingt wie vorzeitige Optimierung. Wenn es sich nicht um ein zeitkritisches Stück Code handelt und wir keinen Grund haben, es zu denken, ist das Brennen von ein paar Millisekunden nichts im Vergleich zu den Kosten der Programmierzeit. –

17

pro Tag ist 86.400 Sekunden hinzuzufügen.

$tomorrow = date('y:m:d', time() + 86400); 
+0

Obwohl aus Gründen der Lesbarkeit Gründen Sie die Integer überall als Service-Leistung verwenden shoudn't. Definieren Sie irgendwo const oder benutzen Sie 60 * 60 * 24, damit klar ist, was die Zahl darstellt. –

+0

ich benutze 86400 so oft, dass es jetzt so offensichtlich ist wie es ist, dass es 60 Sekunden pro Minute gibt :). Wenn ich viele Zeitfunktionen mache, dann erkläre ich es oft als Konstante. – nickf

+10

Nicht jeden Tag sind 86400 Sekunden :) Tag Licht sparen ... – WayFarer

6

Die date_add() Funktion sollte tun, was Sie wollen. Überprüfen Sie außerdem die Dokumente (inoffiziell, aber die offiziellen sind ein wenig spärlich) für das Objekt DateTime, es ist viel schöner, mit den prozeduralen Funktionen in PHP zu arbeiten.

6

mit PHP 5,3

$date = new DateTime(); 
    $interval = new DateInterval('P1D'); 
    echo $date->format('Y-m-d') , PHP_EOL; 
    $date->add($interval); 
    echo $date->format('Y-m-d'), PHP_EOL; 
    $date->add($interval); 
    echo $date->format('Y-m-d'), PHP_EOL; 

ausgeben wird

2012-12-24

2012-12-25

2012-12-26

6

Die einfachste w um x nein hinzuzufügen. .. Tage

echo date('Y-m-d',strtotime("+1 day")); //+1 day from today 

oder von bestimmten Datum ...

echo date('Y-m-d',strtotime("+1 day", strtotime('2007-02-28'))); 
1

Wenn Sie diesen Code an mehreren Stellen benötigen, dann würde ich vorschlagen, dass Sie eine kurze Funktion fügen Sie Ihren Code einfacher zu halten und einfacher zu testen.

function add_days($days, $from_date = null) { 
    if (is_numeric($from_date)) { 
     $new_date = $from_date; 
    } else { 
     $new_date = time(); 
    } 

    // Timestamp is the number of seconds since an event in the past 
    // To increate the value by one day we have to add 86400 seconds to the value 
    // 86400 = 24h * 60m * 60s 
    $new_date += $days * 86400; 

    return $new_date; 
} 

Dann können Sie es überall wie folgt verwenden:

$today  = add_days(0); 
$tomorrow = add_days(1); 
$yesterday = add_days(-1); 
$in_36_hours = add_days(1.5); 

$first_reminder = add_days(10); 
$second_reminder = add_days(5, $first_reminder); 
$last_reminder = add_days(3, $second_reminder); 
-2
<?php 
$dt = new DateTime; 
if(isset($_GET['year']) && isset($_GET['week'])) { 
    $dt->setISODate($_GET['year'], $_GET['week']); 
} else { 
    $dt->setISODate($dt->format('o'), $dt->format('W')); 
} 
$year = $dt->format('o'); 
$week = $dt->format('W'); 
?> 

<a href="<?php echo $_SERVER['PHP_SELF'].'?week='.($week-1).'&year='.$year; ?>">Pre Week</a> 
<a href="<?php echo $_SERVER['PHP_SELF'].'?week='.($week+1).'&year='.$year; ?>">Next Week</a> 
<table width="100%" style="height: 75px; border: 1px solid #00A2FF;"> 
<tr> 
<td style="display: table-cell; 
    vertical-align: middle; 
    cursor: pointer; 
    width: 75px; 
    height: 75px; 
    border: 4px solid #00A2FF; 
    border-radius: 50%;">Employee</td> 
<?php 
do { 
    echo "<td>" . $dt->format('M') . "<br>" . $dt->format('d M Y') . "</td>\n"; 
    $dt->modify('+1 day'); 
} while ($week == $dt->format('W')); 
?> 
</tr> 
</table>