Как вычислить промежуточные даты, 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; }
Как можно получить mktime промежуточных дат?
Спасибо!
Соответственно даты 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]);
$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 ответов
Посмотрите в справочнике, что именно возвращает 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);
$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";
}
$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
01.07.2014
02.07.2014
03.07.2014
04.07.2014
05.07.2014
06.07.2014