Додайте кількість днів до дати


124

Я хочу додати кількість днів до поточної дати: я використовую такий код:

$i=30;
echo $date = strtotime(date("Y-m-d", strtotime($date)) . " +".$i."days");

Але замість того, щоб отримати належну дату, я отримую це: 2592000

Будь ласка, підкажіть.




4
пошук за допомогою імен тегів із дужками навколо них, наприклад [php] [date] addу вікні пошуку. Ви знайдете багато відповідей на подібні питання.
Мікель

Відповіді:


247

Це має бути

echo date('Y-m-d', strtotime("+30 days"));

strtotime

очікує, що йому буде надано рядок, що містить американський формат дати США, і спробує проаналізувати цей формат на часову позначку Unix (кількість секунд з 1 січня 1970 00:00:00 UTC), відносно часової позначки, заданої зараз, або поточний час, якщо зараз не надається.

поки date

Повертає рядок, відформатований відповідно до заданого рядка формату, використовуючи задану цілу часову позначку або поточний час, якщо часова мітка не вказана.

Див. Сторінки керівництва для

та їх функції.


Я думаю, це спричинить проблеми при переході літнього часу та інших кумедних пунктів календаря. Сортування залежить від контексту. Вам потрібно подумати, чи шукаєте 30 цілодобових блоків, які при переході на денний час можуть перенести вас на 23:00.
Дж. Дж. Рохрер

1
@JJRohrer ні, це не буде. strtotimeбуде враховувати будь-який DST для налаштованого часового поясу. DST - це лише питання, коли ви робите щось подібне до цієї програми: stackoverflow.com/questions/4066035
Gordon

Точка взята. Я прийшов до цього питання, намагаючись вирішити щось трохи ближче до питання, на яке ви посилалися. Я сподіваюся, що мій вище коментар змусить інших задуматися про те, щоб серйозно ставитись до своїх розрахунків за дату - легко забути про всі винятки.
JJ Rohrer

64

Це може бути добре

function addDayswithdate($date,$days){

    $date = strtotime("+".$days." days", strtotime($date));
    return  date("Y-m-d", $date);

}

4
Вищевказане рішення також може бути ущільнене в один рядок, якщо вам потрібно швидке рішення і не хочете створювати функції. echo date ("Ymd", strtotime ("+ 12days", strtotime (20130101)))
Mayank Jaiswal

46
$date = new DateTime();
$date->modify('+1 week');
print $date->format('Y-m-d H:i:s');

або print date('Y-m-d H:i:s', mktime(date("H"), date("i"), date("s"), date("m"), date("d") + 7, date("Y"));


Цей метод стосується переходу на літній час. Я не впевнений, чи є PHP рахунки за інші вигадки часу, як, наприклад, високосні секунди, але, залежно від ваших потреб, вам, мабуть, краще використовувати DateTime vs. StrToTime, якщо ви маєте справу з календарними днями.
JJ Rohrer

@chx Це рішення також більш ретельно дозволяє побачити; наприклад, новий DateTime ('2016-12-09 10:35:58'); що йде від часової позначки бази даних ...
mshaffer


10

Ви також можете додати подібне, якщо ви хочете дати 5 днів з певної дати:

У вас є змінна дата з такою датою (отримана з вхідних даних або БД або просто жорстко закодована):

$today = "2015-06-15"; // Or can put $today = date ("Y-m-d");

$fiveDays = date ("Y-m-d", strtotime ($today ."+5 days"));

echo $fiveDays; // Will output 2015-06-20

7

Майте на увазі, що зміна годинника через перехід на літній час може створити певні проблеми при розрахунку днів.

Ось невелика функція php, яка займається цим:

function add_days($date, $days) {
    $timeStamp = strtotime(date('Y-m-d',$date));
    $timeStamp+= 24 * 60 * 60 * $days;

    // ...clock change....
    if (date("I",$timeStamp) != date("I",$date)) {
        if (date("I",$date)=="1") { 
            // summer to winter, add an hour
            $timeStamp+= 60 * 60; 
        } else {
            // summer to winter, deduct an hour
            $timeStamp-= 60 * 60;           
        } // if
    } // if
    $cur_dat = mktime(0, 0, 0, 
                      date("n", $timeStamp), 
                      date("j", $timeStamp), 
                      date("Y", $timeStamp)
                     ); 
    return $cur_dat;
}


6

Ви можете це зробити, маніпулюючи тимчасовим кодом або використовуючи strtotime () . Ось приклад використання strtotime.

$ data ['created'] = дата ('Ymd H: i: s', strtotime ("+ 1 тиждень"));


6

Ви можете використовувати strtotime ()
$data['created'] = date('Y-m-d H:m:s', strtotime('+1 week'));


6

Я знаю, що це старе питання, але для PHP <5.3 ви можете спробувати це:

$date = '05/07/2013';
$add_days = 7;
$date = date('Y-m-d',strtotime($date) + (24*3600*$add_days)); //my preferred method
//or
$date = date('Y-m-d',strtotime($date.' +'.$add_days.' days');

5

Ви можете використовувати клас DateTime, вбудований у PHP. У ньому є метод, який називається "додати", а спосіб його використання детально продемонстрований у посібнику: http://www.php.net/manual/en/datetime.add.php

Однак для цього потрібен PHP 5.3.0.


5
$date = "04/28/2013 07:30:00";

$dates = explode(" ",$date);

$date = strtotime($dates[0]);

$date = strtotime("+6 days", $date);

echo date('m/d/Y', $date)." ".$dates[1];

4

Ви можете спробувати це.

$i=30;
echo  date("Y-m-d",mktime(0,0,0,date('m'),date('d')+$i,date('Y')));

3

Просте і найкраще

echo date('Y-m-d H:i:s')."\n";
echo "<br>";
echo date('Y-m-d H:i:s', mktime(date('H'),date('i'),date('s'), date('m'),date('d')+30,date('Y')))."\n";

Спробуйте це


3
//add the two day

$date = "**2-4-2016**"; //stored into date to variable

echo date("d-m-Y",strtotime($date.**' +2 days'**));

//print output
**4-4-2016**

2

Використовуйте цю функцію addDate () для додавання або віднімання днів, місяця або років (також знадобиться допоміжна функція reformatDate ())

/**
 * $date self explanatory
 * $diff the difference to add or subtract: e.g. '2 days' or '-1 month'
 * $format the format for $date
 **/
    function addDate($date = '', $diff = '', $format = "d/m/Y") {
        if (empty($date) || empty($diff))
            return false;
        $formatedDate = reformatDate($date, $format, $to_format = 'Y-m-d H:i:s');
        $newdate = strtotime($diff, strtotime($formatedDate));
        return date($format, $newdate);
    }
    //Aux function
    function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Y-m-d') {
        $date_aux = date_create_from_format($from_format, $date);
        return date_format($date_aux,$to_format);
    }

Примітка: лише для php> = 5.3



1
//Set time zone
date_default_timezone_set("asia/kolkata");
$pastdate='2016-07-20';
$addYear=1;
$addMonth=3;
$addWeek=2;
$addDays=5;
$newdate=date('Y-m-d', strtotime($pastdate.' +'.$addYear.' years +'.$addMonth. ' months +'.$addWeek.' weeks +'.$addDays.' days'));
echo $newdate;

1

Незважаючи на те, що це давнє питання, такий спосіб його виконання потребує багатьох ситуацій і здається надійним. Потрібно мати PHP 5.3.0 або вище.

$EndDateTime = DateTime::createFromFormat('d/m/Y', "16/07/2017");
$EndDateTime->modify('+6 days');
echo $EndDateTime->format('d/m/Y');

Ви можете мати будь-який тип формату для рядка дати, і це буде працювати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.