Dodanie „+365” zamiast „+1 rok” wystarczyło. Dzięki!
Matt
17
Czy nie przerwałoby to w przypadku roku przestępnego?
Jeremy1026
1
Od PHP 5.1, gdy jest wywoływana bez argumentów, mktime () generuje powiadomienie E_STRICT: zamiast tego użyj funkcji time ().
svandragt
Tutaj też przegłosowano. Liczba sekund w ciągu dnia, dni w roku, sekundy w roku itd. Są zmienne. Jeśli interesuje Cię „jeden rok od teraz”, musisz przejść w odstępie „jeden rok”. Samodzielne dzielenie prowadzi do błędów związanych z dniami przestępnymi i sekundami przestępnymi oraz zmianami czasu letniego. Co gorsza, powoduje flappy jednostkowe testy.
drobert
dlaczego moja odpowiedź jest odrzucona? $ addedoneyear = data ("y") + 1; // za dodanie jednego roku, co w tym złego?
Zwróć uwagę, że jeśli $ startDate jest już znacznikiem czasu (takim jak utworzony wcześniej za pomocą funkcji time () lub mktime ()), a nie ciągiem znaków, nie powinieneś zawijać go w strtotime, bo to nie zadziała. Zamiast tego zrób $futureDate=date('Y-m-d',strtotime('+1 year',$startDate));tak , jak wspomniano poniżej K Prime.
Chociaż to zwraca właściwą odpowiedź, druga w rzeczywistości również nie zwraca błędu ... tylko zła data.
SeanJA
1
strtotime nie zgłasza błędów. Zwraca fałsz w przypadku błędu.
Frank Farmer
PHP wyrzuci ostrzeżenia, jeśli domyślna
strefa
Byłem coraz błąd w kodzie zmieniłem ,się .i pracował date("Y-m-d",strtotime('+1 year '.$startDate));
Muhammad Bilal
7
// Declare a variable for this year $this_year = date("Y");
// Add 1 to the variable$next_year = $this_year + 1;
$year_after = $this_year + 2;
// Check your codeecho"This year is ";
echo$this_year;
echo"<br />";
echo"Next year is ";
echo$next_year;
echo"<br />";
echo"The year after that is ";
echo$year_after;
$date = new \DateTimeImmutable('today'); //'today' gives midnight, leave blank for current time.$futureDate = $date->add(\DateInterval::createFromDateString('+1 Year'))
strtotime()zwraca bool(false), ponieważ nie może przeanalizować ciągu '+one year'(nie rozumie „jeden”). falsejest następnie niejawnie rzutowany na integerznacznik czasu 0. Dobrym pomysłem jest sprawdzenie strtotime(), czy dane wyjściowe nie są, bool(false)zanim przejdziesz do innych funkcji.
Tak, słuszna uwaga. Mój kod produkcyjny będzie to miał, ale wyrywałem sobie włosy, próbując to uruchomić, więc zredukowałem go do jak najmniejszego kodu. Dzięki!
$monthDay = date('m/d');
$year = date('Y')+1;
$oneYearFuture = "".$monthDay."/".$year."";
echo"The date one year in the future is: ".$oneYearFuture."";
Odpowiedzi:
Aby dodać jeden rok do dzisiejszej daty, użyj:
$oneYearOn = date('Y-m-d',strtotime(date("Y-m-d", mktime()) . " + 365 day"));
W przypadku innych przykładów musisz zainicjować $ StartingDate wartością datownika, na przykład:
$StartingDate = mktime(); // todays date as a timestamp
Spróbuj tego
$newEndingDate = date("Y-m-d", strtotime(date("Y-m-d", strtotime($StaringDate)) . " + 365 day"));
lub
$newEndingDate = date("Y-m-d", strtotime(date("Y-m-d", strtotime($StaringDate)) . " + 1 year"));
źródło
$futureDate=date('Y-m-d', strtotime('+1 year'));
$ futureDate jest za rok od teraz!
$futureDate=date('Y-m-d', strtotime('+1 year', strtotime($startDate)) );
$ futureDate jest o rok od $ startDate!
źródło
$futureDate=date('Y-m-d',strtotime('+1 year',$startDate));
tak , jak wspomniano poniżej K Prime.Próbować:
$futureDate=date('Y-m-d',strtotime('+1 year',$startDate));
źródło
,
się.
i pracowałdate("Y-m-d",strtotime('+1 year '.$startDate))
;// Declare a variable for this year $this_year = date("Y"); // Add 1 to the variable $next_year = $this_year + 1; $year_after = $this_year + 2; // Check your code echo "This year is "; echo $this_year; echo "<br />"; echo "Next year is "; echo $next_year; echo "<br />"; echo "The year after that is "; echo $year_after;
źródło
miałem tylko ten sam problem, ale to było najprostsze rozwiązanie:
<?php (date('Y')+1).date('-m-d'); ?>
źródło
$next_year = (date('Y')+1)
.//1 year from today's date echo date('d-m-Y', strtotime('+1 year')); //1 year from from specific date echo date('22-09-Y', strtotime('+1 year'));
mam nadzieję, że ten prostszy fragment kodu pomoże komuś w przyszłości :)
źródło
Wolę podejście OO:
$date = new \DateTimeImmutable('today'); //'today' gives midnight, leave blank for current time. $futureDate = $date->add(\DateInterval::createFromDateString('+1 Year'))
W
DateTimeImmutable
przeciwnym razie zmodyfikujesz również oryginalną datę! więcej na temat DateTimeImmutable: http://php.net/manual/en/class.datetimeimmutable.phpJeśli chcesz tylko od dzisiejszej daty, zawsze możesz zrobić:
new \DateTimeImmutable('-1 Month');
źródło
Jeśli używasz PHP 5.3, dzieje się tak, ponieważ musisz ustawić domyślną strefę czasową:
źródło
strtotime()
zwracabool(false)
, ponieważ nie może przeanalizować ciągu'+one year'
(nie rozumie „jeden”).false
jest następnie niejawnie rzutowany nainteger
znacznik czasu0
. Dobrym pomysłem jest sprawdzeniestrtotime()
, czy dane wyjściowe nie są,bool(false)
zanim przejdziesz do innych funkcji.Z dokumentów:
źródło
Spróbuj tego
$nextyear = date("M d,Y",mktime(0, 0, 0, date("m",strtotime($startDate)), date("d",strtotime($startDate)), date("Y",strtotime($startDate))+1));
źródło
Jest też prostsze i mniej wyszukane rozwiązanie:
$monthDay = date('m/d'); $year = date('Y')+1; $oneYearFuture = "".$monthDay."/".$year.""; echo"The date one year in the future is: ".$oneYearFuture."";
źródło
Moje rozwiązanie to:
date('Y-m-d', time()-60*60*24*365);
Możesz uczynić go bardziej „czytelnym” za pomocą definicji:
define('ONE_SECOND', 1); define('ONE_MINUTE', 60 * ONE_SECOND); define('ONE_HOUR', 60 * ONE_MINUTE); define('ONE_DAY', 24 * ONE_HOUR); define('ONE_YEAR', 365 * ONE_DAY); date('Y-m-d', time()-ONE_YEAR);
źródło
W moim przypadku (chcę dodać 3 lata do obecnej daty) rozwiązaniem było:
$future_date = date('Y-m-d', strtotime("now + 3 years"));
Do Gardenee, Treby'ego i Daniela Limy: co się stanie z 29 lutego? Czasami luty ma tylko 28 dni :)
źródło