2010-04-09 13 views
10

Nie wiem, jak to wyjaśnić poprawnie, ale tylko kilka próbek dla was, aby naprawdę można dostać to, co próbuję powiedzieć.php uzyskać datę przyszłą datę

Dziś jest 09 kwietnia 2010

7 dni od teraz jest kwiecień 16,2010

Im szuka kodu PHP, który może dać mi dokładną datę podając liczbę dni przerwa przed kontrolą bieżąca data.

Szukałem wątku, który może rozwiązać, a nawet dać wskazówkę, jak rozwiązać ten problem, ale nie znalazłem.

+0

może to być ewentualnie rephrased jako „Chcę dodać' $ x' liczba dni do określonej daty "? – deceze

+0

Twoje pytanie nie jest jasne. Czy możesz ponownie określić, jakie są znane parametry i jakie wartości są dla Ciebie interesujące? –

Odpowiedz

25

Jeśli używasz PHP> = 5,2, zdecydowanie zalecamy korzystać z nowego obiektu DateTime, która sprawia, że ​​praca z datami dużo łatwiejsze:

<?php 
$date = new DateTime("2006-12-12"); 
$date->modify("+7 day"); 
echo $date->format("Y-m-d"); 
?> 
+0

świetna odpowiedź ,, to pomaga mi wiele –

+1

lub dla 1 liniowej 'echo date_create (" 2006-12-12 ") -> modyfikować (" + 7 dni ") -> format (" Y-m-d ");' –

9

Spójrz tutaj - http://php.net/manual/en/function.strtotime.php

<?php 
// This is what you need for future date from now. 
echo date('Y-m-d H:i:s', strtotime("+7 day")); 

// This is what you need for future date from specific date. 
echo date('Y-m-d H:i:s', strtotime('01/01/2010 +7 day')); 
?> 
+0

+1. Możesz nie chcieć "echo strtotime (...)". Zamiast tego użyj zwróconej wartości w funkcji daty, takiej jak 'echo date ('Y-m-d H: i: s', strtotime ('- 7 days'))'. –

0

Można użyć mktime z datą. (http://php.net/manual/en/function.date.php)

Data podaje bieżącą datę. Jest to lepsze niż zwykłe dodawanie/odejmowanie do znacznika czasu, ponieważ może uwzględniać czas letni.

<?php 
# this gets you 7 days earlier than the current date 
$lastWeek = mktime(0, 0, 0, date("m") , date("d")-7, date("Y")); 
# now pretty-print it out (eg, prints April 2, 2010.) 
echo date("F j, Y.", $lastWeek), "\n"; 
?> 
2

Będziesz musiał zajrzeć do strtotime(). Wyobrażam sobie twój ostateczny kod będzie wyglądać następująco:

$future_date = "April 16,2010"; 
$seconds = strtotime($future_date) - time(); 
$days = $seconds /(60 * 60* 24); 
echo $days; //Returns "6.0212962962963" 
+0

"6.0212962962963" - klasyczny przykład problemu precyzji pływaka PHP :) –

+0

Niezupełnie, po prostu _exact_ liczba dni reprezentowana jako liczba dziesiętna. – Sam152

1

Jeśli używasz PHP> = 5.3, może to być opcja.

<?php 
$date = new DateTime("2006-12-12"); 
$date->add(new DateInterval("P7D")); 
?> 
5

Zaakceptowanych odpowiedź nie jest źle, ale nie jest to najlepsze rozwiązanie:

DateTime klasa bierze opcjonalny ciąg w konstruktorze, który można określić tę samą logikę jak modyfikować metody.

<?php 
$date = new DateTime("+7 day"); 

Na przykład:

<?php 
namespace DateTimeExample; 

$now = new \DateTime("now"); 
$inOneWeek = new \DateTime("+7 day"); 

printf("Now it's the %s", $now->format('Y-m-d')); 
printf("In one week it's the %s", $inOneWeek->format('Y-m-d')); 

Listę dostępnych względnych formatów (dla konstruktora DateTime) przyjrzeć http://php.net/manual/de/datetime.formats.relative.php

Powiązane problemy