*/ class Varien_Data_Form_Element_Date extends Varien_Data_Form_Element_Abstract { /** * @var Zend_Date */ protected $_value; public function __construct($attributes=array()) { parent::__construct($attributes); $this->setType('text'); $this->setExtType('textfield'); if (isset($attributes['value'])) { $this->setValue($attributes['value']); } } /** * If script executes on x64 system, converts large * numeric values to timestamp limit */ protected function _toTimestamp($value) { $value = (int)$value; if ($value > 3155760000) { $value = 0; } return $value; } /** * Set date value * If Zend_Date instance is provided instead of value, other params will be ignored. * Format and locale must be compatible with Zend_Date * * @param mixed $value * @param string $format * @param string $locale * @return Varien_Data_Form_Element_Date */ public function setValue($value, $format = null, $locale = null) { if (empty($value)) { $this->_value = ''; return $this; } if ($value instanceof Zend_Date) { $this->_value = $value; return $this; } if (preg_match('/^[0-9]+$/', $value)) { $this->_value = new Zend_Date($this->_toTimestamp($value)); //$this->_value = new Zend_Date((int)value); return $this; } // last check, if input format was set if (null === $format) { $format = Varien_Date::DATETIME_INTERNAL_FORMAT; if ($this->getInputFormat()) { $format = $this->getInputFormat(); } } // last check, if locale was set if (null === $locale) { if (!$locale = $this->getLocale()) { $locale = null; } } try { $this->_value = new Zend_Date($value, $format, $locale); } catch (Exception $e) { $this->_value = ''; } return $this; } /** * Get date value as string. * Format can be specified, or it will be taken from $this->getFormat() * * @param string $format (compatible with Zend_Date) * @return string */ public function getValue($format = null) { if (empty($this->_value)) { return ''; } if (null === $format) { $format = $this->getFormat(); } return $this->_value->toString($format); } /** * Get value instance, if any * * @return Zend_Date */ public function getValueInstance() { if (empty($this->_value)) { return null; } return $this->_value; } /** * Output the input field and assign calendar instance to it. * In order to output the date: * - the value must be instantiated (Zend_Date) * - output format must be set (compatible with Zend_Date) * * @return string */ public function getElementHtml() { $this->addClass('input-text'); $html = sprintf( '' .' ', $this->getName(), $this->getHtmlId(), $this->_escape($this->getValue()), $this->serialize($this->getHtmlAttributes()), $this->getImage(), $this->getHtmlId(), 'Select Date', ($this->getDisabled() ? 'display:none;' : '') ); $outputFormat = $this->getFormat(); if (empty($outputFormat)) { throw new Exception('Output format is not specified. Please, specify "format" key in constructor, or set it using setFormat().'); } $displayFormat = Varien_Date::convertZendToStrFtime($outputFormat, true, (bool)$this->getTime()); $html .= sprintf(' ', $this->getHtmlId(), $displayFormat, $this->getTime() ? 'true' : 'false', $this->getHtmlId() ); $html .= $this->getAfterElementHtml(); return $html; } }