Дата зенда — дневное различие

Я имею ниже строки кодов

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

это возвратится 4

Но если дал

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

это возвратится-27.. как я получу правильный ответ

9
задан Charles 6 April 2011 в 03:20
поделиться

4 ответа

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

это дает правильный ответ

15
ответ дан 4 December 2019 в 07:34
поделиться

Я считаю, что проблема в вашей строке детали. Попробуйте вместо этого ГГГГ-ММ-дд .

$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);
7
ответ дан 4 December 2019 в 07:34
поделиться

Я расширил Zend_Date для своих собственных вспомогательных функций. Мое решение похоже на решение Nisanth с некоторыми ключевыми отличиями:

  1. вычислить начало дня для обоих дней перед сравнением
  2. использовать round () вместо ceil ()
  3. не добавляйте 1 к результату

Пример кода:

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);
    }
}
2
ответ дан 4 December 2019 в 07:34
поделиться
    $cerimonia = new Zend_Date('your date here');
    $days = $cerimonia->sub(Zend_Date::now());
    $days = round($days/86400)+1;
3
ответ дан 4 December 2019 в 07:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: