Возвращает массив строк даты для диапазона дат в php 5.2

0

У меня есть этот код

<?php
function getDatesBetween2Dates($startTime, $endTime) {
  $day = 86400;
  $format = 'd-m-Y';
  $startTime = strtotime($startTime);
  $endTime = strtotime($endTime);
  $numDays = round(($endTime - $startTime) / $day) + 1;
  $days = array();

  for ($i = 0; $i < $numDays; $i++) {
      $days[] = date($format, ($startTime + ($i * $day)));
  }

  return $days;
}

$days = getDatesBetween2Dates(
  date('d-m-Y', strtotime("$start")),
  date('d-m-Y',strtotime("$end"))
);

foreach ($days as $key => $value) {
  // ...
}

Затем происходит поиск базы данных и вывод результатов на основе даты возврата. Я не писал этот код и понятия не имею, откуда у меня его.

Проблема в том, что возвращается два 2 ноября 2014 года??? Его все испортило. Любая помощь была бы потрясающей. Я попробую поделиться ссылкой на страницу. (страница содержит личную информацию)

http://djwservices.co.uk/invoices/calendar.php

В качестве побочного вопроса, если кто-то может получить расширение/сжимать, чтобы работать на onclick, это было бы потрясающе.

Спасибо заранее Daz

Теги:
date

2 ответа

0

Это должно быть проще с помощью функции date_diff. Из руководства:

$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');

Вот модифицированная версия, если у вас еще нет php 5.3:

function getDatesBetween2Dates($startTime, $endTime) {
    $datetime1 = new DateTime($startTime);
    $datetime2 = new DateTime($endTime);
    $interval = round(($datetime2->format('U') - $datetime1->format('U')) / (60*60*24));

    for ($i = 0; $i < $interval; $i++) {
       $dateTemp = $datetime1;
       $str = "+" . $i . " day";
       $dateTemp = $dateTemp->modify($str);
       $days[] = $dateTemp->format('d-m-Y');
    }

   return $days;
}
  • 0
    Спасибо, попробовал получить эту ошибку. Неустранимая ошибка: вызов неопределенного метода DateTime :: diff () в /hermes/waloraweb034/b1699/moo.myeventpicturescouk/djw/invoices/test.php в строке 12
  • 0
    Обратите внимание, что я исправил несколько ошибок в этом через изменения :)
Показать ещё 10 комментариев
0

Используя генераторы PHP 5.5, вы можете сделать что-то вроде:

function period($begin, $interval, $end) {
    while ($begin <= $end) {
        yield $begin;
        $begin->add($interval);
    }
}

$interval = new \DateInterval('P1D');

$begin = new \DateTime( '2014-11-01' );
$end = new \DateTime( '2014-11-30' );

foreach (period($begin, $interval, $end) as $dt) {
    echo $dt->format( "Y-m-d" ), PHP_EOL;
}
  • 0
    Пробовал это тоже .... Ошибка разбора: синтаксическая ошибка, неожиданный T_VARIABLE в /hermes/waloraweb034/b1699/moo.myeventpicturescouk/djw/invoices/test.php в строке 12
  • 0
    Как я уже сказал, это решение требует PHP> = 5.5
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню