Разница дат с високосным годом - PullRequest
2 голосов
/ 12 июля 2011

У меня 5 разных расписаний на 5 недель:

  1. первая неделя = с понедельника по пятницу (с 8:00 до 17:00) && дни отдыха в субботу и воскресенье
  2. вторая неделя = с понедельника по пятницу (с 10:00 до 18:00) && дни отдыха в субботу и воскресенье
  3. третья неделя = с понедельника по пятницу (с 11:00 до 19:00) && дни отдыха в субботу и воскресенье
  4. четвертая неделя = выходной день с понедельника && со вторника по субботу (с 10:30 до 18:30) && выходной день воскресенья
  5. пятая неделя = выходной день с понедельника && со вторника по субботу (с 8:30 до 17:30) && выходной день воскресенья

Основываясь на моем массиве вычислений [0], [0], который соответствует понедельнику первой недели, установлен на 25 апреля 2011 года.

У меня есть этот код для вычисления разницы между датой ввода и датой начала, то есть 25 апреля 2011 года.

$tdays = floor((strtotime($date2) - strtotime($date1))/86400);

Теперь я могу рассчитывать свой график работы с апреля 2011 года до февраля 2012 года. Однако, если я введу дату после февраля 2012 года, результат будет неправильным из-за високосного года. Есть ли техника для этого?

1 Ответ

1 голос
/ 12 июля 2011

Если вы можете использовать php 5.3, вы должны использовать date_diff ()

или попробовать что-то вроде этого:

<?php
        function dateDifference($startDate, $endDate)
        {
            $startDate = strtotime($startDate);
            $endDate = strtotime($endDate);
            if ($startDate === false || $startDate < 0 || $endDate === false || $endDate < 0 || $startDate > $endDate)
                return false;

            $years = date('Y', $endDate) - date('Y', $startDate);

            $endMonth = date('m', $endDate);
            $startMonth = date('m', $startDate);

            // Calculate months
            $months = $endMonth - $startMonth;
            if ($months <= 0)  {
                $months += 12;
                $years--;
            }
            if ($years < 0)
                return false;

            // Calculate the days
                        $offsets = array();
                        if ($years > 0)
                            $offsets[] = $years . (($years == 1) ? ' year' : ' years');
                        if ($months > 0)
                            $offsets[] = $months . (($months == 1) ? ' month' : ' months');
                        $offsets = count($offsets) > 0 ? '+' . implode(' ', $offsets) : 'now';

                        $days = $endDate - strtotime($offsets, $startDate);
                        $days = date('z', $days);   

            return array($years, $months, $days);
        }
?>
...