public function execute($lastRunDt = null) { $config = Zend_Registry::get('config'); $checkDtStart = new Zend_Date($this->_lastRunDt); $checkDtStart->subHour($config->user->numHoursEvaluationReminder->val); $checkDtEnd = new Zend_Date(); $checkDtEnd->subHour($config->user->numHoursEvaluationReminder->val); $event = new Event(); $events = $event->getEvents(null, null, null, $checkDtStart->getTimestamp(), $checkDtEnd->getTimestamp(), 'open'); $location = new Location(); $workshop = new Workshop(); $instructor = new Event_Instructor(); $attendee = new Event_Attendee(); $eu = new Evaluation_User(); foreach ($events as $e) { $startDt = strtotime($e->date . ' ' . $e->startTime); $endDt = strtotime($e->date . ' ' . $e->endTime); if ($checkDtStart->getTimestamp() < $endDt && $checkDtEnd->getTimestamp() >= $endDt) { $evalAvailableDt = new Zend_Date($endDt); $evalAvailableDt->addHour($config->user->numHoursEvaluationAvailability->val); if ($evalAvailableDt->getTimestamp() > time()) { $taken = $eu->getCompleted($e->eventId); $thisLocation = $location->find($e->locationId); if (is_null($thisLocation)) { throw new Ot_Exception_Data('msg-error-noLocation'); } $thisWorkshop = $workshop->find($e->workshopId); if (is_null($thisWorkshop)) { throw new Ot_Exception_Data('msg-error-noWorkshop'); } $instructors = $instructor->getInstructorsForEvent($e->eventId); $instructorNames = array(); $instructorEmails = array(); foreach ($instructors as $i) { $instructorNames[] = $i['firstName'] . ' ' . $i['lastName']; $instructorEmails[] = $i['emailAddress']; } $data = array('workshopName' => $thisWorkshop->title, 'workshopDate' => date('m/d/Y', $startDt), 'workshopStartTime' => date('g:i a', $startDt), 'workshopEndTime' => date('g:i a', $endDt), 'workshopMinimumEnrollment' => $e->minSize, 'workshopCurrentEnrollment' => $e->roleSize, 'locationName' => $thisLocation->name, 'locationAddress' => $thisLocation->address, 'instructorNames' => implode(', ', $instructorNames), 'instructorEmails' => implode(', ', $instructorEmails)); $attending = $attendee->getAttendeesForEvent($e->eventId, 'attending'); foreach ($attending as $a) { if ($a['attended'] == 1 && !in_array($a['accountId'], $taken)) { $trigger = new Ot_Trigger(); $trigger->setVariables($data); $trigger->accountId = $a['accountId']; $trigger->studentEmail = $a['emailAddress']; $trigger->studentName = $a['firstName'] . ' ' . $a['lastName']; $trigger->studentUsername = $a['username']; $trigger->dispatch('Event_Evaluation_Reminder'); } } } } } }
public function cancelarAction() { $agenda_id = $this->getRequest()->getParam('id'); $agenda_id = $this->getRequest()->getParam('id'); if (!$agenda_id) { $this->_helper->flashMessenger->addMessage(array('danger' => "Agendamento não encontrado!")); $this->_redirect("cliente/"); } /** * busca dados do agendamento */ $modelAgenda = new Model_DbTable_Agenda(); $agenda = $modelAgenda->getById($agenda_id); /** * Verifica se o agendamento e do usuario logado */ if ($agenda->usuario_id !== Zend_Auth::getInstance()->getIdentity()->usuario_id) { $this->_helper->flashMessenger->addMessage(array('danger' => "<strong>Acesso negado!</strong> Você não pode alterar este agendamento!")); $this->_redirect("cliente/"); } /** * verifica se pode alterar a data */ $modelConfig = new Model_DbTable_Config(); $prazoCancelamento = $modelConfig->getBySlug('prazo_alterar_agendamento'); $zendDateNow = new Zend_Date(); $zendDateAgenda = new Zend_Date($agenda->agenda_data); if (!$zendDateNow->isEarlier($zendDateAgenda->subHour($prazoCancelamento->config_valor))) { $this->_helper->flashMessenger->addMessage(array('warning' => "<strong>Atenção!</strong> O prazo para alterar este agendamento já expirou!")); $this->_redirect("cliente/"); } $this->view->agenda = $agenda; /** * form de motivo */ $formMotivo = new Form_Salao_AgendaManualCancelamento(); $formMotivo->submit->setLabel("Cancelar Agendamento"); $this->view->formMotivo = $formMotivo; if ($this->getRequest()->isPost()) { $data = $this->getRequest()->getPost(); if ($formMotivo->isValid($data)) { $agenda_cancelado_motivo = $formMotivo->getValue('agenda_cancelado_motivo'); try { Zend_Db_Table_Abstract::getDefaultAdapter()->beginTransaction(); $update = array('agenda_cancelado' => 1, 'agenda_cancelado_autor' => 'Cliente', 'agenda_cancelado_usuario' => 1, 'agenda_cancelado_motivo' => $agenda_cancelado_motivo, 'agenda_cancelado_data' => Zend_Date::now()->get('YYYY-MM-dd H:m')); $modelAgenda->updateById($update, $agenda_id); /** * envia o email de confirmacao (cliente) */ $pluginMail = new Plugin_Mail(); $pluginMail->setDataMail('agenda', $agenda); $pluginMail->setDataMail('agenda_cancelado_motivo', $agenda_cancelado_motivo); $pluginMail->send('cliente-agendamento-cancelar.phtml', 'Agendamento Cancelado', Zend_Auth::getInstance()->getIdentity()->usuario_email); /** * envia o email de confirmacao (salao) */ $pluginMail2 = new Plugin_Mail(); $pluginMail2->setDataMail('agenda', $agenda); $pluginMail2->setDataMail('agenda_cancelado_motivo', $agenda_cancelado_motivo); $pluginMail2->send('salao-agendamento-cancelar.phtml', 'Agendamento Cancelado', $agenda->salao_email); Zend_Db_Table_Abstract::getDefaultAdapter()->commit(); // retira a cobranca do salao $pluginCobranca = new Plugin_Cobranca($agenda); $pluginCobranca->retirar(); $this->_helper->flashMessenger->addMessage(array('success' => 'Agendamento cancelado com sucesso.')); $this->_redirect("cliente/"); } catch (Zend_Mail_Exception $ex) { Zend_Db_Table_Abstract::getDefaultAdapter()->commit(); $this->_helper->flashMessenger->addMessage(array('success' => 'Agendamento cancelado com sucesso.')); $this->_helper->flashMessenger->addMessage(array('warning' => 'Não foi possível enviar o e-mail de confirmação.')); $this->_redirect("cliente/"); } catch (Exception $ex) { Zend_Db_Table_Abstract::getDefaultAdapter()->rollBack(); $this->_helper->flashMessenger->addMessage(array('danger' => 'Não foi possível cancelar o agendamento. Tente novamente mais tarde. - ' . $ex->getMessage())); $this->_redirect("cliente/"); } } } }
/** * test looseBehaviour */ public function testLoose() { $date = new Zend_Date(0, 'de_DE'); try { $date->set(null, Zend_Date::YEAR); $this->fail(); } catch (Zend_Date_Exception $e) { // success } $date->set(10, 'de_DE'); $this->assertEquals(10, $date->getTimestamp()); try { $date->add(null, Zend_Date::YEAR); $this->fail(); } catch (Zend_Date_Exception $e) { // success } $date->add(10, 'de_DE'); $this->assertEquals(20, $date->getTimestamp()); try { $date->sub(null, Zend_Date::YEAR); $this->fail(); } catch (Zend_Date_Exception $e) { // success } $date->sub(10, 'de_DE'); $this->assertEquals(10, $date->getTimestamp()); try { $date->compare(null, Zend_Date::YEAR); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->equals(null, Zend_Date::YEAR); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->isEarlier(null, Zend_Date::YEAR); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->isLater(null, Zend_Date::YEAR); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->setTime(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->addTime(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->subTime(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->compareTime(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->setDate(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->addDate(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->subDate(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->compareDate(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->setIso(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->addIso(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->subIso(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->compareIso(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->setArpa(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->addArpa(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->subArpa(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->compareArpa(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->setYear(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->addYear(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->subYear(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->compareYear(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->setMonth(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->addMonth(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->subMonth(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->compareMonth(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->setDay(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->addDay(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->subDay(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->compareDay(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->setWeekday(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->addWeekday(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->subWeekday(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->compareWeekday(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->setDayOfYear(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->addDayOfYear(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->subDayOfYear(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->compareDayOfYear(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->setHour(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->addHour(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->subHour(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->compareHour(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->setMinute(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->addMinute(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->subMinute(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->compareMinute(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->setSecond(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->addSecond(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->subSecond(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->compareSecond(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->setWeek(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->addWeek(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->subWeek(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } try { $date->compareWeek(null); $this->fail(); } catch (Zend_Date_Exception $e) { // success } }
public function execute($lastRunDt = null) { $config = Zend_Registry::get('config'); $event = new Event(); $events = $event->getEvents(null, null, null, time(), null, 'open'); $location = new Location(); $workshop = new Workshop(); $instructor = new Event_Instructor(); $attendees = new Event_Attendee(); $lastRunDt = new Zend_Date($this->_lastRunDt); $currentDt = new Zend_Date(); foreach ($events as $e) { $startDt = strtotime($e->date . ' ' . $e->startTime); $endDt = strtotime($e->date . ' ' . $e->endTime); $firstDt = new Zend_Date($startDt); $firstDt->subHour($config->user->numHoursFirstReminder->val); $finalDt = new Zend_Date($startDt); $finalDt->subHour($config->user->numHoursFinalReminder->val); $notification = null; if ($firstDt->getTimestamp() > $lastRunDt->getTimestamp() && $firstDt->getTimestamp() < $currentDt->getTimestamp()) { $notification = 'first'; } if ($finalDt->getTimestamp() > $lastRunDt->getTimestamp() && $finalDt->getTimestamp() < $currentDt->getTimestamp()) { $notification = 'final'; } if (!is_null($notification)) { $thisLocation = $location->find($e->locationId); if (is_null($thisLocation)) { throw new Ot_Exception_Data('msg-error-noLocation'); } $thisWorkshop = $workshop->find($e->workshopId); if (is_null($thisWorkshop)) { throw new Ot_Exception_Data('msg-error-noWorkshop'); } $instructors = $instructor->getInstructorsForEvent($e->eventId); $instructorNames = array(); $instructorEmails = array(); foreach ($instructors as $i) { $instructorNames[] = $i['firstName'] . ' ' . $i['lastName']; $instructorEmails[] = $i['emailAddress']; } $data = array('workshopName' => $thisWorkshop->title, 'workshopDate' => date('m/d/Y', $startDt), 'workshopStartTime' => date('g:i a', $startDt), 'workshopEndTime' => date('g:i a', $endDt), 'workshopMinimumEnrollment' => $e->minSize, 'workshopCurrentEnrollment' => $e->roleSize, 'locationName' => $thisLocation->name, 'locationAddress' => $thisLocation->address, 'instructorNames' => implode(', ', $instructorNames), 'instructorEmails' => implode(', ', $instructorEmails)); $attending = $attendees->getAttendeesForEvent($e->eventId, 'attending'); foreach ($attending as $a) { $trigger = new Ot_Trigger(); $trigger->setVariables($data); $trigger->accountId = $a['accountId']; $trigger->studentEmail = $a['emailAddress']; $trigger->studentName = $a['firstName'] . ' ' . $a['lastName']; if ($notification == 'final') { $trigger->dispatch('Event_Attendee_Final_Reminder'); } else { $trigger->dispatch('Event_Attendee_First_Reminder'); } } $trigger = new Ot_Trigger(); $trigger->setVariables($data); if ($notification == 'final') { $trigger->dispatch('Event_Instructor_Final_Reminder'); } else { $trigger->dispatch('Event_Instructor_First_Reminder'); } } } }
/** * search for orders to review per website */ private function searchOrdersForReview() { $websites = $this->_helper->getwebsites(true); foreach ($websites as $website) { $apiEnabled = $this->_helper->isEnabled($website); if ($apiEnabled && $this->_helper->getWebsiteConfig(\Dotdigitalgroup\Email\Helper\Config::XML_PATH_CONNECTOR_SYNC_ORDER_ENABLED, $website) && $this->_reviewHelper->getOrderStatus($website) && $this->_reviewHelper->getDelay($website)) { $storeIds = $website->getStoreIds(); if (empty($storeIds)) { continue; } $orderStatusFromConfig = $this->_reviewHelper->getOrderStatus($website); $delayInDays = $this->_reviewHelper->getDelay($website); $campaignCollection = $this->_campaignCollection->create()->addFieldToFilter('event_name', 'Order Review')->load(); $campaignOrderIds = $campaignCollection->getColumnValues('order_increment_id'); $fromTime = new \Zend_Date(); $fromTime->subDay($delayInDays); $toTime = clone $fromTime; $to = $toTime->toString('YYYY-MM-dd HH:mm:ss'); $from = $fromTime->subHour(2)->toString('YYYY-MM-dd HH:mm:ss'); $created = array('from' => $from, 'to' => $to, 'date' => true); $collection = $this->_orderCollection->create()->addFieldToFilter('main_table.status', $orderStatusFromConfig)->addFieldToFilter('main_table.created_at', $created)->addFieldToFilter('main_table.store_id', array('in' => $storeIds)); if (!empty($campaignOrderIds)) { $collection->addFieldToFilter('main_table.increment_id', array('nin' => $campaignOrderIds)); } //process rules on collection $collection = $this->_rulesFactory->create()->process($collection, \Dotdigitalgroup\Email\Model\Rules::REVIEW, $website->getId()); if ($collection->getSize()) { $this->_reviewCollection[$website->getId()] = $collection; } } } }
public function getRecentordercountGraphValues() { $return = array(); $connection = $this->getReadConnection(); $oneHourAgo = new Zend_Date(); $oneHourAgo->subHour(1); $oneHourAgo = $this->getResource()->formatDate($oneHourAgo); foreach ($this->_getWebsites() as $website) { $sql = Mage::getResourceModel('sales/order_collection')->addFieldToFilter('created_at', array('from' => $oneHourAgo))->addFieldToFilter('store_id', array('in' => $website->getStoreIds()))->getSelectCountSql(); $recentOrderCount = $connection->fetchOne($sql); $subArray = array('' => $recentOrderCount); foreach ($website->getStoreCollection() as $store) { $sql = Mage::getResourceModel('sales/order_collection')->addFieldToFilter('created_at', array('from' => $oneHourAgo))->addFieldToFilter('store_id', $store->getId())->getSelectCountSql(); $recentOrderCount = $connection->fetchOne($sql); $subArray['store_' . $store->getCode() . '.value'] = $recentOrderCount; } $return['website_' . $website->getCode() . '.value'] = $subArray; } return $return; }
public function getEventsForUser($accountId) { $config = Zend_Registry::get('config'); $attendee = new Event_Attendee(); $instructor = new Event_Instructor(); $location = new Location(); $document = new Workshop_Document(); $account = new Ot_Account(); $eu = new Evaluation_User(); $stayOpen = new Zend_Date(); $stayOpen->subHour($config->user->numHoursEvaluationAvailability->val); $locationCache = array(); $reservations = $attendee->getEventsForAttendee($accountId); $time = time(); foreach ($reservations as &$r) { $r['active'] = false; // we determine if the class is open $startDt = new Zend_Date(strtotime($r['date'] . ' ' . $r['startTime'])); $endDt = new Zend_Date(strtotime($r['date'] . ' ' . $r['endTime'])); $endDt->addHour($config->user->numHoursEvaluationAvailability->val); $r['evaluatable'] = $this->isEvaluatable($r['eventId']); // checks to see if its possible that the class is open for evaluation if ($r['evaluatable'] && !$eu->hasCompleted($accountId, $r['eventId'])) { $r['active'] = true; } elseif ($startDt->getTimestamp() > $time) { $r['active'] = true; } $r = array_merge(array('startDt' => $startDt->getTimestamp()), $r); $r['hasHandouts'] = false; $documents = $document->getDocumentsForWorkshop($r['workshopId']); if (count($documents) > 0) { $r['hasHandouts'] = true; } $r['cancelable'] = false; if ($r['active']) { $startDt->subHour($config->user->numHoursEventCancel->val); $r['cancelable'] = $startDt->getTimestamp() > $time; if ($r['status'] == 'waitlist') { $waiting = $attendee->getAttendeesForEvent($r['eventId'], 'waitlist'); $position = 1; foreach ($waiting as $w) { if ($accountId == $w['accountId']) { break; } $position++; } $r['waitlistPosition'] = $position; } } } // Get presently taught classes $teaching = $instructor->getEventsForInstructor($accountId); foreach ($teaching as &$t) { $startDt = new Zend_Date(strtotime($t['date'] . ' ' . $t['startTime'])); $endDt = new Zend_Date(strtotime($t['date'] . ' ' . $t['endTime'])); $endDt->addHour($config->user->numHoursEvaluationAvailability->val); $t = array_merge(array('startDt' => $startDt->getTimestamp()), $t); $t['active'] = false; // checks to see if its possible that the class is open for evaluation if ($endDt->getTimestamp() > $time) { $t['active'] = true; } $t['status'] = 'instructor'; } $events = array_merge($reservations, $teaching); // sort by event order $eDates = array(); foreach ($events as $key => $value) { $eDates[$key] = $value['startDt']; } asort($eDates); $newEvents = array(); foreach (array_keys($eDates) as $key) { $newEvents[] = $events[$key]; } $events = $newEvents; $currentEvents = array(); $pastEvents = array(); foreach ($events as $e) { $where = $instructor->getAdapter()->quoteInto('eventId = ?', $e['eventId']); $instructors = $instructor->fetchAll($where); $instructorIds = array(); foreach ($instructors as $i) { $instructorIds[] = $i->accountId; } if (count($instructorIds) != 0) { $accounts = $account->fetchAll($account->getAdapter()->quoteInto('accountId IN (?)', $instructorIds), array('lastName', 'firstName')); foreach ($accounts as $a) { $e['instructors'][] = $a->firstName . ' ' . $a->lastName; } } if (isset($locationCache[$e['locationId']])) { $e['location'] = $locationCache[$e['locationId']]; } else { $thisLocation = $location->find($e['locationId']); if (is_null($thisLocation)) { throw new Ot_Exception_Data('Location not found'); } $e['location'] = $thisLocation->toArray(); $locationCache[$e['locationId']] = $e['location']; } if ($e['active']) { $currentEvents[] = $e; } else { if ($e['status'] != 'waitlist') { $pastEvents[] = $e; } } } $ret = array('currentEvents' => $currentEvents, 'pastEvents' => array_reverse($pastEvents)); return $ret; }
/** * 取得某个预定义时间段 * * @static * @param integer $interval * @param string $forceUnit * @param integer $timestamp * @return array */ public static function getPredefinedRange($interval, $forceUnit = null, $timestamp = null) { if (empty($timestamp)) { $timestamp = time(); } $start = new Zend_Date($timestamp); $end = new Zend_Date($timestamp); switch ($interval) { case self::TODAY: $start->setHour(0)->setMinute(0)->setSecond(0); $unit = Zend_Date::HOUR; break; case self::YESTODAY: $start->subDay(1)->setHour(0)->setMinute(0)->setSecond(0); $end = clone $start; $end->addDay(1); $unit = Zend_Date::HOUR; break; case self::TOMORROW: $start->addDay(1)->setHour(0)->setMinute(0)->setSecond(0); $end = clone $start; $end->addDay(1); $unit = Zend_Date::HOUR; break; case self::THIS_MONTH: $start->setDay(1)->setHour(0)->setMinute(0)->setSecond(0); $unit = Zend_Date::DAY; break; case self::THIS_YEAR: $start->setMonth(1)->setDay(1)->setHour(0)->setMinute(0)->setSecond(0); $end->addMonth(1)->setDay(1)->setHour(0)->setMinute(0)->setSecond(0); $unit = Zend_Date::DAY; break; case self::THIS_SEASON: $start->setMonth(3 * floor(($start->toValue('M') - 1) / 3) + 1)->setDay(1)->setHour(0)->setMinute(0)->setSecond(0); $unit = Zend_Date::DAY; case self::RECENT_24HOUR: $start->subHour(24); $unit = Zend_Date::HOUR; break; case self::RECENT_48HOUR: $start->subHour(48); $unit = Zend_Date::HOUR; break; case self::RECENT_1WEEK: $start->subWeek(1); $unit = Zend_Date::DAY; break; case self::RECENT_1MONTH: $start->subMonth(1); $unit = Zend_Date::DAY; break; case self::RECENT_24MONTH: $start->subMonth(24); $unit = Zend_Date::DAY; break; case self::LAST_1MONTH: $start->subMonth(1)->setDay(1)->setHour(0)->setMinute(0)->setSecond(0); $end = clone $start; $end->addMonth(1); $unit = Zend_Date::DAY; break; case self::LAST_1YEAR: $start->subYear(1)->setMonth(1)->setDay(1)->setHour(0)->setMinute(0)->setSecond(0); $end = clone $start; $end->addYear(1); $unit = Zend_Date::DAY; break; case self::ENTIRE_DAY: $start->setDate(self::ERA_DATE, self::ZF_DATE_FORMAT)->setTime(self::ERA_TIME, self::ZF_TIME_FORMAT); $end->addDay(1); $unit = Zend_Date::DAY; break; default: $unit = Zend_Date::SECOND; } if (!empty($forceUnit)) { $unit = $forceUnit; } $start = max(self::truncateDatetime($start, $unit), self::truncateDatetime(self::ERA_DATETIME, $unit)); $end = max(self::truncateDatetime($end, $unit), self::truncateDatetime(self::ERA_DATETIME, $unit)); return compact('start', 'end', 'unit'); }