value = date('Y-m-d H:i:s', $value); } elseif(is_string($value)) { $this->value = date('Y-m-d H:i:s', strtotime($value)); } } function Nice() { return date('d/m/Y g:ia', strtotime($this->value)); } function Nice24() { return date('d/m/Y H:i', strtotime($this->value)); } function Date() { return date('d/m/Y', strtotime($this->value)); } function Time() { return date('g:ia', strtotime($this->value)); } function Time24() { return date('H:i', strtotime($this->value)); } function requireField() { $parts=Array('datatype'=>'datetime'); $values=Array('type'=>'SSDatetime', 'parts'=>$parts); DB::requireField($this->tableName, $this->name, $values); } function URLDatetime() { return date('Y-m-d%20H:i:s', strtotime($this->value)); } public function scaffoldFormField($title = null, $params = null) { return new PopupDateTimeField($this->name, $title); } /** * */ protected static $mock_now = null; /** * Returns either the current system date as determined * by date(), or a mocked date through {@link set_mock_now()}. * * @return SSDatetime */ static function now() { if(self::$mock_now) { return self::$mock_now; } else { return DBField::create('SSDatetime', date('Y-m-d H:i:s')); } } /** * Mock the system date temporarily, which is useful for time-based unit testing. * Use {@link clear_mock_now()} to revert to the current system date. * Caution: This sets a fixed date that doesn't increment with time. * * @param SSDatetime|string $datetime Either in object format, or as a SSDatetime compatible string. */ static function set_mock_now($datetime) { if($datetime instanceof SSDatetime) { self::$mock_now = $datetime; } elseif(is_string($datetime)) { self::$mock_now = DBField::create('SSDatetime', $datetime); } else { throw new Exception('SSDatetime::set_mock_now(): Wrong format: ' . $datetime); } } /** * Clear any mocked date, which causes * {@link Now()} to return the current system date. */ static function clear_mock_now() { self::$mock_now = null; } } ?>