Zend Date — day difference

烂漫一生 提交于 2019-11-28 00:10:39

问题


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


回答1:


$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




回答2:


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);



回答3:


    $cerimonia = new Zend_Date('your date here');
    $days = $cerimonia->sub(Zend_Date::now());
    $days = round($days/86400)+1;



回答4:


I've extended Zend_Date for my own convenience functions. My solution is similar to Nisanth's, with some key differences:

  1. calculate the beginning of the day for both days before comparing
  2. use round() instead of ceil()
  3. 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);
    }
}



回答5:


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.




回答6:


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;
 } 


来源:https://stackoverflow.com/questions/2513830/zend-date-day-difference

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!