работа с датой в пхп. Конечная и промежуточная дата

AH
На сайте с 27.10.2015
Offline
29
741

Прошу прощения за тупость, но сам догнать не могу.

Появилась необходимость работы с датами

К примеру :

1.к текущей дате (дата заказа) прибавить промежуток времени (в днях или месяцах) и получить конечную дату.

2. между начальной (сегодняшней) и конечной может быть приличное расстояние (срок действия договора). Нужно выбрать скажем все числа ОТ и ДО скажем интервалом месяц.

например

сегодня 2015,11,26

следующее 2015,12,26

и потом 2016,01,26

и так до конца 2016,11,26

$srok = "12"; //неважно как получили хоть гетом хоть постом

$data = date('y-m-d'); // как вариант
$d1 = strtotime('today'); // как тот же вариант
$d2 = strtotime('+1 month', $d1); // должен прибавить семяц к $d1 (снегодня)
$dataclose = strtotime('+'.$srok.' month', $d1); // должна получиться конечная дата

прошу палками не бить, учился очень давно, курить маны поздно если в такой мелочи разобраться не могу.

короче не робит, хоть убей. пишет в базу 0000-00-00 хоть ты тресни (сегодня пишет как положено любым из двух вариантов)

SUPER Bitcoin кран без таймера! - YOURCOINS.PRO (https://yourcoins.pro/index.php?aff=1518292697)
G2
На сайте с 27.10.2009
Offline
62
#1

Держи


date_default_timezone_set('Europe/Kiev');
$duration = 12; //неважно как получили хоть гетом хоть постом
$startDate = date('y-m-d'); // как вариант
echo "Start: $startDate\n";

$date = date_create($startDate);
for ($i=0; $i<$duration; $i++) {
date_add($date, date_interval_create_from_date_string('1 month'));
echo date_format($date, 'Y-m-d')."\n";
}
КакМаршрутник (http://goo.gl/forms/hMgaH0s9E5) — как маршрутник, но работает.
W
На сайте с 09.04.2013
Offline
46
#2

Мой вариант:

1.к текущей дате (дата заказа) прибавить промежуток времени (в днях или месяцах) и получить конечную дату.


$start = new \DateTime("now");
$start->add(new \DateInterval('P1M5D'));
echo 'Через 1 месяц и 5 дней будет: ' . $start->format('d/m/Y') . "\n";

2. между начальной (сегодняшней) и конечной может быть приличное расстояние (срок действия договора). Нужно выбрать скажем все числа ОТ и ДО скажем интервалом месяц.


$start = \DateTime::createFromFormat('d/m/Y', '26/11/2015');
$end = \DateTime::createFromFormat('d/m/Y', '26/11/2016');
$Interval = \DateInterval::createFromDateString('1 month');
$Iterator = new \DatePeriod($start, $Interval, $end, \DatePeriod::EXCLUDE_START_DATE);
echo "Все числа с интервалом месяц";
foreach ($Iterator as $date) {
echo $date->format('d/m/Y') .PHP_EOL;
}
G2
На сайте с 27.10.2009
Offline
62
#3
webjey:
DatePeriod

А это было красиво :)

AH
На сайте с 27.10.2015
Offline
29
#4

date_default_timezone_set('Europe/Kiev');
$duration = 12; //неважно как получили хоть гетом хоть постом
$startDate = date('y-m-d'); // как вариант
echo "Start: $startDate\n";
$date = date_create($startDate);
for ($i=0; $i<$duration; $i++) {
date_add($date, date_interval_create_from_date_string('1 month'));
echo date_format($date, 'Y-m-d')."\n";
}

прибавляет к 1970,01,1 сам не понимаю почему, но дает так

$start = new \DateTime("now");

$start->add(new \DateInterval('P1M5D'));
echo 'Через 1 месяц и 5 дней будет: ' . $start->format('d/m/Y') . "\n";

не соображу как в эту конструкцию переменную воткнуть

$start = \DateTime::createFromFormat('d/m/Y', '26/11/2015');

$end = \DateTime::createFromFormat('d/m/Y', '26/11/2016');
$Interval = \DateInterval::createFromDateString('1 month');

сюда собственно тоже 26/11/2015 это обязательно или могу сюда переменную воткнуть.

мне как бы вообще предпочтительно все в переменные воткнуть

W
На сайте с 09.04.2013
Offline
46
#5
ArbitHome:

не соображу как в эту конструкцию переменную воткнуть


$months=1;
$days=5;
$Interval=sprintf("P%dM%dD",$months,$days);
$start_date="2015-11-26";
$start = new \DateTime($start_date);
$start->add(new \DateInterval($Interval));
echo "Через 1 месяц и 5 дней будет: " . $start->format('d/m/Y') . "\n";


$start_date='26/11/2015';
$end_date='26/11/2016';
$months=1;
$months_interval=sprintf("%d month",$months);

$start = \DateTime::createFromFormat('d/m/Y', $start_date);
$end = \DateTime::createFromFormat('d/m/Y', $end_date);
$Interval = \DateInterval::createFromDateString($months_interval);
$Iterator = new \DatePeriod($start, $Interval, $end, \DatePeriod::EXCLUDE_START_DATE);
echo "Все числа с интервалом месяц".PHP_EOL;
foreach ($Iterator as $date) {
echo $date->format('d/m/Y') .PHP_EOL;
}

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий