Додавання днів до $ Date в PHP


216

У мене повернута дата як частина запиту mySQL у формі 2010-09-17

Я хотів би встановити змінні $ Date2 до $ Date5 наступним чином:

$Date2 = $Date + 1

$Date3 = $Date + 2

тощо.

так що він повертається 2010-09-18, і 2010-09-19т.д ...

я намагався

date('Y-m-d', strtotime($Date. ' + 1 day'))

але це дає мені дату ПЕРЕД $Date.

Який правильний спосіб отримати мої дати у форматній формі "Ymd", щоб вони могли бути використані в іншому запиті?


Відповіді:


447

Все, що вам потрібно зробити, це використовувати daysзамість dayцього:

<?php
$Date = "2010-09-17";
echo date('Y-m-d', strtotime($Date. ' + 1 days'));
echo date('Y-m-d', strtotime($Date. ' + 2 days'));
?>

І він виводить правильно:

2010-09-18
2010-09-19

7
Він виводить правильно, використовуючи так dayсамо добре ... date("Y-m-d", strtotime('2010-09-17 + 1 day'))-> 2010-09-18, date("Y-m-d", strtotime('2010-09-17 + 2 day'))->2010-09-19
Даніель Вандерслуйс

Просто спробував це так, і це спрацювало. Я досі не маю уявлення, чому я отримав значення за день до моєї дати початку, коли спочатку я спробував це.
Істарі

Що робити, якщо мені довелося додати змінну на де-кількість днів?
Карлос Мартінс

3
@Carlos echo date ("Ymd", strtotime ($ Date. '+'. $ Змінна. 'Days'));
Pradeep Kumar Prabaharan

Ні, цей метод взагалі не працює.
Повертається

81

Якщо ви використовуєте PHP 5.3, ви можете використовувати DateTimeоб'єкт та його addметод:

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->add(new DateInterval('P1D')); // P1D means a period of 1 day
$Date2 = $date->format('Y-m-d');

Погляньте на сторінку посібника для DateIntervalконструктора, щоб побачити, як побудувати інші періоди, які потрібно додати до вашої дати (2 дні 'P2D', 3 'P3D', і так далі).

Без PHP 5.3 ви повинні мати можливість використовувати strtotimeте, як ви це зробили (я тестував це, і він працює як в 5.1.6, так і в 5.2.10):

$Date1 = '2010-09-17';
$Date2 = date('Y-m-d', strtotime($Date1 . " + 1 day"));
// var_dump($Date2) returns "2010-09-18"

Вибачте Даніель, але веб-сервер працює за допомогою php 5.2.6, тому це не буде працювати
Istari

2
DateTime::constructвикористовує той самий механізм, що і strtotimeдля розбору дати, так що ви також можете робити, для new DateTime("+1 day $date")чого не потрібно 5,3
Gordon

Я не хотів це спростовувати, але якось це зробив = /
Стівен

Це фактична відповідь на php 5.5+
TheLegendaryCopyCoder

29

З PHP 5.2 ви можете використовувати зміни з об'єктом DateTime:

http://php.net/manual/en/datetime.modify.php

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->modify('+1 day');
$Date2 = $date->format('Y-m-d');

Будьте уважні, додаючи місяці ... (і в меншій мірі роки)


прийнята відповідь просто дає відповідь протягом 15000+ днів, коли ця відповідь дає відповідь, коли ви додасте ще 25000+ днів ..
Pradeep Kumar Prabaharan

Ви також можете запитувати це на DateTimeImmutable (), і ви отримаєте модифіковану копію без ризику зміни оригіналу.
Хаві Монтеро

17

Ось невеликий фрагмент для демонстрації змін дати:

$date = date("Y-m-d");
//increment 2 days
$mod_date = strtotime($date."+ 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//decrement 2 days
$mod_date = strtotime($date."- 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 month
$mod_date = strtotime($date."+ 1 months");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 year
$mod_date = strtotime($date."+ 1 years");
echo date("Y-m-d",$mod_date) . "\n";

чи можете ви побачити мої споріднені (Quesiton) [ stackoverflow.com/q/61421783/8919244] ?
Файсал

8

Ви також можете використовувати наступний формат

strtotime("-3 days", time());
strtotime("+1 day", strtotime($date));

Ви можете складати зміни таким чином:

strtotime("+1 day", strtotime("+1 year", strtotime($date)));

Зверніть увагу на різницю між цим підходом і тим, що в інших відповідях: замість об'єднання значень +1 dayі <timestamp>, ви можете просто передати часову позначку як другий параметр strtotime.


5

Використання змінної за кількість днів

$myDate = "2014-01-16";
$nDays = 16;
$newDate = strtotime($myDate . '+ '.$nDays.'days');
echo newDate('d/m/Y', $soma); //format new date 

5

Ось найпростіше рішення вашого запиту

$date=date_create("2013-03-15"); // or your date string
date_add($date,date_interval_create_from_date_string("40 days"));// add number of days 
echo date_format($date,"Y-m-d"); //set date format of the result


0

Усі повинні використовувати наступний код:

$nday = time() + ( 24 * 60 * 60);    
echo 'Now:       '. date('Y-m-d') ."\n";    
echo 'Next Day: '. date('Y-m-d', $nday) ."\n";

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