У меня есть простой вопрос о том, как рассчитать фактический день с даты начала до даты окончания .

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

Пример:
Дата начала: 15 марта 2014 г.
Дата окончания: 11.06.2015

Результат: 453 дня

Я читал один вопрос, очень похожий на этот. Но не хочу.
Как рассчитать разницу между двумя датами с помощью PHP? < / а>

0
Blackie 15 Мар 2014 в 08:59
Я предпочитаю использовать отметку времени Unix для всех этих вопросов. Странности нашей календарной системы не имеют значения при работе с более-менее чистым символом времени. Просто используйте $daysApart = ($date1-$date2)/86400
 – 
rfoo
15 Мар 2014 в 09:24
Я работаю с некоторыми системами, связанными с отелем. Поэтому мне нужно очень точно отображать оставшийся день.
 – 
Blackie
15 Мар 2014 в 10:38
 – 
Nanne
15 Мар 2014 в 11:05
@ Нанна, я упомянул, что читал этот вопрос, и ответ был не тем, что я искал. Пожалуйста, проверьте ссылку, которую я прикрепил к моему вопросу.
 – 
Blackie
17 Мар 2014 в 02:32

4 ответа

Лучший ответ

Лучший способ добиться этого - использовать DateTime DateInterval ) объекты. Преобразуйте каждую строку даты в объект DateTime и используйте метод DateTime::diff() для вычисления количества дней между ними:

$dt1 = new DateTime($date1);
$dt2 = new DateTime($date2);
$diff = $dt2->diff($dt1);
echo $diff->format("%a"); // => 453
4
Amal Murali 15 Мар 2014 в 09:08

Используя JQuery, вы можете получить фактические дни

var due = due_date_month + '/' + due_date_day + '/' + due_date_year;
var deliver = deliver_date_month + '/' + deliver_date_day + '/' + deliver_date_year;

var deliver_date = new Date(deliver);

var due_date = new Date(due);

if (due_date > deliver_date) {
var difference = Math.floor(due_date - deliver_date);

difference = parseInt(difference / 86400000);
alert(difference);

}                                                      
0
Bhupendra 15 Мар 2014 в 09:11
Не каждый день имеет 864000 секунд.
 – 
Amal Murali
15 Мар 2014 в 09:17

Вы можете преобразовать даты в unix-время, используя strtotime (), вычесть даты и разделить результат на 86400 (секунд в день), как это:

$start = strtotime($date1);
$end = strtotime($date2);
$diff = $end-$start;
$days = ceil($diff/86400); //or floor depends what you need

P.s .: $ start и $ end должны быть в американском формате.

0
alberjoe 15 Мар 2014 в 09:14
1
Не каждый день имеет 864000 секунд (если принять во внимание летнее время).
 – 
Amal Murali
15 Мар 2014 в 09:19
DATEDIFF('ending date','Starting date');

    Ex. 
$q=mysql_query('select DATEDIFF('$end_date','$start_date')' AS total_days <from table name>');
    $result=mysql_fetch_array($q);

    echo $result['total_days'];
0
Vinita Pawar 15 Мар 2014 в 09:42