- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
<?php
/**
* хелпер подсчитывает кол-во дней между двух дат
*/
class ********_View_Helper_DateDiff
{
/**
* из дня, месяца и года формирует время в формате кол-ва дней
* @return integer
*/
protected function dateToDays($day, $month, $year)
{
if ($month > 2) {
// March = 0, April = 1, ..., December = 9,
// January = 10, February = 11
$month -= 3;
} else {
$month += 9;
--$year;
}
$hb_negativeyear = $year < 0;
$century = intval($year / 100);
$year = $year % 100;
if ($hb_negativeyear) {
return intval((14609700 * $century + ($year == 0 ? 1 : 0)) / 400) +
intval((1461 * $year + 1) / 4) +
intval((153 * $month + 2) / 5) +
$day + 1721118;
} else {
return intval(146097 * $century / 4) +
intval(1461 * $year / 4) +
intval((153 * $month + 2) / 5) +
$day + 1721119;
}
}
/**
* высчитывает разницу между двух дат
* @return integer
*/
public function dateDiff($day1,$month1,$year1,$day2,$month2,$year2) {
$days1 = $this->dateToDays($day1,$month1,$year1);
$days2 = $this->dateToDays($day2,$month2,$year2);
return ($days1-$days2);
}
}
кусок самописного расширения ZF.
про gregoriantojd() люди не знали.
Yozheg 12.10.2009 23:15 # −1
return (mktime(0,0,0,$month1,$day1,$year1)-mktime(0,0,0,$month2,$day2,$year2))/(3600*24)
guest 13.10.2009 08:17 # +2
guest 19.10.2009 04:21 # 0