Как вычислить промежуточные даты, PHP

Есть форма, в которой вводятся даты заезда и выезда в формате dd.mm.yyyy
Соответственно даты 2. Их потом обработчиком PHP разбиваю на массив и перевожу в mktime:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .php.geshi_code {font-family:monospace;} .php.geshi_code .imp {font-weight: bold; color: red;} .php.geshi_code .kw1 {color: #b1b100;} .php.geshi_code .kw2 {color: #000000; font-weight: bold;} .php.geshi_code .kw3 {color: #990000;} .php.geshi_code .co1 {color: #666666; font-style: italic;} .php.geshi_code .co2 {color: #666666; font-style: italic;} .php.geshi_code .co3 {color: #0000cc; font-style: italic;} .php.geshi_code .co4 {color: #009933; font-style: italic;} .php.geshi_code .coMULTI {color: #666666; font-style: italic;} .php.geshi_code .es0 {color: #000099; font-weight: bold;} .php.geshi_code .es1 {color: #000099; font-weight: bold;} .php.geshi_code .es2 {color: #660099; font-weight: bold;} .php.geshi_code .es3 {color: #660099; font-weight: bold;} .php.geshi_code .es4 {color: #006699; font-weight: bold;} .php.geshi_code .es5 {color: #006699; font-weight: bold; font-style: italic;} .php.geshi_code .es6 {color: #009933; font-weight: bold;} .php.geshi_code .es_h {color: #000099; font-weight: bold;} .php.geshi_code .br0 {color: #009900;} .php.geshi_code .sy0 {color: #339933;} .php.geshi_code .sy1 {color: #000000; font-weight: bold;} .php.geshi_code .st0 {color: #0000ff;} .php.geshi_code .st_h {color: #0000ff;} .php.geshi_code .nu0 {color: #cc66cc;} .php.geshi_code .nu8 {color: #208080;} .php.geshi_code .nu12 {color: #208080;} .php.geshi_code .nu19 {color:#800080;} .php.geshi_code .me1 {color: #004000;} .php.geshi_code .me2 {color: #004000;} .php.geshi_code .re0 {color: #000088;} .php.geshi_code span.xtra { display:block; }
$start = explode(".",$zaezd);  
$finish = explode(".", $vyezd);  
$st = mktime(0,0,0,$start[1],$start[0], $start[2]);
$fn = mktime(0,0,0,$finish[1],$finish[0], $finish[2]);

Как можно получить mktime промежуточных дат?
Спасибо!

1 ответов


Если я правильно понял - то нужно просто узнать, какие даты лежат в этом периоде? Если да, то так:

// известно, что кол-во секунд в сутках - 86400
for ($i=$st; $i<=$fn; $i = $i + 86400) {
    echo date('d.m.Y', $i) . "\n ";
}

Посмотрите в справочнике, что именно возвращает mktime.
Или вопрос сразу покажется вам нелепым, или вам не стоит заниматься программированием.



<?php
$zaezd = '30.12.2013';
$vyezd = '28.02.2014';
$start = explode(".",$zaezd);
$finish = explode(".", $vyezd);
$st = mktime(0,0,0,$start[1],$start[0], $start[2]);
$fn = mktime(0,0,0,$finish[1],$finish[0], $finish[2]);
$date = new DateTime();
$date->setTimestamp($st);
$interval = new DateInterval('P1D');
do {

  $date->add($interval);
  $current = $date->getTimestamp();

  if ($current < $fn) {
    echo 'mktime: ' . $current . ', date:' . date('Y.m.d', $current) . '<br/>' . PHP_EOL;
  }
}
while ($current < $fn);

Лучше всего использовать классы для работы с датой и временем http://php.net/manual/ru/book.datetime.php

<?php
$start = '01.07.2014';
$end = '07.07.2014';

$start_dt = new DateTime($start);
$end_dt = new DateTime($end);

$interval = new DateInterval('P1D');
$period = new DatePeriod($start_dt,$interval,$end_dt);

foreach ($period as $date){
    echo $date->format('d.m.Y')."\n";
}

///Выведит:
01.07.2014
02.07.2014
03.07.2014
04.07.2014
05.07.2014
06.07.2014