2016-04-15 3 views
5

У меня есть дату в таком виде - - 20160428000000 (28 апреля 2016), т.е. ггггммдд ...добавить дней в месяц, не превышающий последний день месяца PHP

мне нужно, что если несколько дней (например, 3.) Являются добавлено к этой дате - он должен добавить их, но не более месяца (04) - ожидаемый результат - 20160430000000 - 30 апреля

Аналогично, 20160226000000 + 5 дней должен вернуть 20160229000000 то високосный год февраль это означает, что он не должен переходить к другой месяц.

Любые советы/идеи?

+0

Получите интервал между вашей датой и последней датой месяца. Если этот интервал меньше заданного интервала для добавления, просто верните последний день месяца. – mitkosoft

ответ

3

Другой альтернативой было бы использовать DateTime классы, чтобы проверить это:

Во-первых, конечно, создать свой объект через вход. Затем установите конечный день месяца.

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

$day = 5; // days to be added 
$date = '20160226000000'; // input date 
$dt = DateTime::createFromFormat('YmdHis', $date); // create the input date 
$end = clone $dt; // clone/copy the input 
$end->modify('last day of this month'); // and set it to last day 
$dt->add(DateInterval::createFromDateString("+{$day} days")); // add x days 
// make comparision 
$final_date = ($dt > $end) ? $end->format('YmdHis') : $dt->format('YmdHis'); 
echo $final_date; 
+1

приятный и элегантный! +1 – mitkosoft

+0

Это тоже работает, спасибо большое – jitendrapurohit

+0

Я собирался предложить что-то подобное, используя 'DateTimeImmutable', но это в основном та же логика. +1 :) – Narf

1

Для этого вы можете попробовать так:

$given_date = 20160428000000; 
$no_of_day = 3; 

if(date('m',strtotime($given_date)) < date('m',strtotime($given_date ." +".$no_of_day."days"))){ 
    echo "Exceeded to next month <br/>"; 
    echo "Last date of month should be: ".date("t M Y", strtotime($given_date)); 
} 
else { 
    echo "Next date will be after ".$no_of_day." day(s)<br/>"; 
    echo date('d M Y',strtotime($given_date ." +".$no_of_day."days")); 
} 

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

+0

Спасибо, но это даст мне последнюю дату - 30 апреля? – jitendrapurohit

+0

@jitendrapurohit! Да, попробуем. – Yash

+0

Да, это работает! Спасибо – jitendrapurohit

0

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

<?php 
$date_orig = 20160226000000; 
$add_day = 5; # No. of days to add 

$added_date  = strtotime($date_orig. ' + '.$add_day.' days'); // Add $add_day to $date_orig 
$last_date  = strtotime(date("YmtHis", strtotime($date_orig))); // Last day of $date_orig 
$new_date  = ($added_date > $last_date) ? $last_date : $added_date; // check the added date exceeds the last date 
$new_date_format = date("YmdHis", $new_date); // Format Date 

echo $new_date_format; 
?> 
Смежные вопросы