コード例 #1
0
ファイル: PcTask.php プロジェクト: ntemple/intelli-plancake
 /**
  * If possible, returns one of these strings (comparing today's date with the due date):
  * _ yesterday
  * _ today
  * _ tomorrow
  * _ the week-day corresponding to 'in2days, Wed' (i.e.: Wednesday)
  * _ the week-day corresponding to 'in3days, Thu'
  * _ the week-day corresponding to 'in4days, Fri'
  * _ the week-day corresponding to 'in5days, Sat'
  * If any of those is unapplicable, it returns getFormattedLocalDueDate()
  *
  * @return     string
  */
 public function getHumanFriendlyDueDate()
 {
     $dateFormat = DateFormat::getInstance();
     $formattedDueDate = $this->getFormattedLocalDueDate();
     if (!$formattedDueDate) {
         return '';
     }
     $dueDateTimestamp = $dateFormat->getTimestamp($formattedDueDate);
     $todayTimestamp = PcUserPeer::getLoggedInUser()->getTime();
     $tomorrowTimestamp = $todayTimestamp + 86400;
     $yesterdayTimestamp = $todayTimestamp - 86400;
     list($tomorrowDay, $tomorrowMonth, $tomorrowYear) = explode('-', date('d-m-Y', $tomorrowTimestamp));
     list($todayDay, $todayMonth, $todayYear) = explode('-', date('d-m-Y', $todayTimestamp));
     list($yesterdayDay, $yesterdayMonth, $yesterdayYear) = explode('-', date('d-m-Y', $yesterdayTimestamp));
     $todayStart = mktime(0, 0, 0, $todayMonth, $todayDay, $todayYear);
     $todayEnd = mktime(23, 59, 59, $todayMonth, $todayDay, $todayYear);
     $tomorrowStart = mktime(0, 0, 0, $tomorrowMonth, $tomorrowDay, $tomorrowYear);
     $tomorrowEnd = mktime(23, 59, 59, $tomorrowMonth, $tomorrowDay, $tomorrowYear);
     $yesterdayStart = mktime(0, 0, 0, $yesterdayMonth, $yesterdayDay, $yesterdayYear);
     $yesterdayEnd = mktime(23, 59, 59, $yesterdayMonth, $yesterdayDay, $yesterdayYear);
     if ($todayStart < $dueDateTimestamp && $dueDateTimestamp < $todayEnd) {
         return __('ACCOUNT_MISC_TODAY');
     }
     if ($dueDateTimestamp < $todayStart) {
         if ($yesterdayStart < $dueDateTimestamp && $dueDateTimestamp < $yesterdayEnd) {
             return __('ACCOUNT_MISC_YESTERDAY');
         }
     }
     if ($dueDateTimestamp > $todayEnd) {
         if ($tomorrowStart < $dueDateTimestamp && $dueDateTimestamp < $tomorrowEnd) {
             return __('ACCOUNT_MISC_TOMORROW');
         }
         // the task is not in the future but not tomorrow
         // we will check whether it is within the next 5 days
         $deltaSinceTomorrowSec = $dueDateTimestamp - $tomorrowEnd;
         $deltaSinceTomorrowDays = ceil($deltaSinceTomorrowSec / 86400);
         // I'm adding 1 because $deltaDays has got tomorrow as a reference
         $deltaDays = $deltaSinceTomorrowDays + 1;
         if ($deltaDays <= 5) {
             // We need to display something like 'in3days, Thu'
             // I need to get the day of the week to display
             $weekDays = array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
             $localizedWeekDays = array(__('ACCOUNT_DOW_SUN'), __('ACCOUNT_DOW_MON'), __('ACCOUNT_DOW_TUE'), __('ACCOUNT_DOW_WED'), __('ACCOUNT_DOW_THU'), __('ACCOUNT_DOW_FRI'), __('ACCOUNT_DOW_SAT'));
             $todayWeekDay = date('D', PcUserPeer::getLoggedInUser()->getTime());
             if (($todayWeekDayKey = array_search($todayWeekDay, $weekDays)) === FALSE) {
                 throw new Exception('Couldn\'t find the right week day key for today');
             }
             $dueDateWeekDayIndex = ($todayWeekDayKey + $deltaDays) % 7;
             $dueDateWeekDay = $localizedWeekDays[$dueDateWeekDayIndex];
             return sprintf(__('ACCOUNT_MISC_IN_X_DAYS'), $deltaDays) . ', ' . ucfirst($dueDateWeekDay);
         }
     }
     // At this point, we realized we can't apply any shortcut
     // we don't specify the year if it is the current one
     if ($this->getDueDate('Y') == date('Y', PcUserPeer::getLoggedInUser()->getTime())) {
         return $this->getDueDate("j") . ' ' . PcUtils::fromIndexToMonth($this->getDueDate('n')) . ', ' . ucfirst(PcUtils::fromIndexToWeekday($this->getDueDate('N')));
     } else {
         // return $this->getDueDate('j M Y');
         return $this->getDueDate("j") . ' ' . PcUtils::fromIndexToMonth($this->getDueDate('n')) . ' ' . $this->getDueDate('Y');
     }
 }