Zend Date -- day difference
I have the below line of codes
$day1 = new Zend_Date('2010-03-01', 'YYYY-mm-dd');
$day2 = new Zend_Date('2010-03-05', 'YYYY-mm-dd');
$dateDiff = $day2->getDate()->get(Zend_Date::TIMESTAMP) - $day1->getDate()->get(Zend_Date::TIMESTAMP);
$days = floor((($dateDiff / 60) / 60) / 24);
return $days;
this will return 4
But if gave
$day1 = new Zend_Date('2010-02-28', 'YYYY-mm-dd');
$day2 = 开发者_运维技巧new Zend_Date('2010-03-01', 'YYYY-mm-dd');
$dateDiff = $day2->getDate()->get(Zend_Date::TIMESTAMP) - $day1->getDate()->get(Zend_Date::TIMESTAMP);
$days = floor((($dateDiff / 60) / 60) / 24);
return $days;
it will return -27 .. how will i get right answer
$firstDay = new Zend_Date('2010-02-28', 'YYYY-MM-dd');
$lastDay = new Zend_Date('2010-03-01', 'YYYY-MM-dd');
$diff = $lastDay->sub($firstDay)->toValue();
$days = ceil($diff/60/60/24) +1;
return $days;
this gives the right answer
I believe the problem is in your part string. Try YYYY-MM-dd instead.
$day1 = new Zend_Date('2010-02-28', 'YYYY-MM-dd');
$day2 = new Zend_Date('2010-03-01', 'YYYY-MM-dd');
echo $day2->sub($day1)->toString(Zend_Date::DAY);
$cerimonia = new Zend_Date('your date here');
$days = $cerimonia->sub(Zend_Date::now());
$days = round($days/86400)+1;
I've extended Zend_Date
for my own convenience functions. My solution is similar to Nisanth's, with some key differences:
- calculate the beginning of the day for both days before comparing
- use
round()
instead ofceil()
- do not add
1
to the result
Example code:
class My_Date extends Zend_Date
{
public static function now($locale = null)
{
return new My_Date(time(), self::TIMESTAMP, $locale);
}
/**
* set to the first second of current day
*/
public function setDayStart()
{
return $this->setHour(0)->setMinute(0)->setSecond(0);
}
/**
* get the first second of current day
*/
public function getDayStart()
{
$clone = clone $this;
return $clone->setDayStart();
}
/**
* get count of days between dates, ignores time values
*/
public function getDaysBetween($date)
{
// 86400 seconds/day = 24 hours/day * 60 minutes/hour * 60 seconds/minute
// rounding takes care of time changes
return round($date->getDayStart()->sub(
$this->getDayStart()
)->toValue() / 86400);
}
}
If $date is a Zend_Date object you can use the following:
if ($date->isEarlier(Zend_Date::now()->subDay(2)){
[...]
}
or the other subXxx functions of the Zend_Date object.
number of days between date of registration (later) and date of purchase (before)
// $datePurchase instanceof Zend_Date
// $dateRegistration instanceof Zend_Date
if($datePurchase && $dateRegistration) {
$diff = $dateRegistration->sub($datePurchase)->toValue();
$days = ceil($diff/60/60/24)+1;
}
精彩评论