| | <?php |
| |
|
| | namespace Kanboard\Core; |
| |
|
| | use DateTime; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | class DateParser extends Base |
| | { |
| | const DATE_FORMAT = 'm/d/Y'; |
| | const TIME_FORMAT = 'H:i'; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getUserDateFormat() |
| | { |
| | return $this->configModel->get('application_date_format', DateParser::DATE_FORMAT); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getUserDateTimeFormat() |
| | { |
| | return $this->getUserDateFormat().' '.$this->getUserTimeFormat(); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getUserTimeFormat() |
| | { |
| | return $this->configModel->get('application_time_format', DateParser::TIME_FORMAT); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getTimeFormats() |
| | { |
| | return array( |
| | 'H:i', |
| | 'g:i a', |
| | ); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getDateFormats($iso = false) |
| | { |
| | $formats = array( |
| | $this->getUserDateFormat(), |
| | ); |
| |
|
| | $isoFormats = array( |
| | 'Y-m-d', |
| | 'Y_m_d', |
| | ); |
| |
|
| | $userFormats = array( |
| | 'm/d/Y', |
| | 'd/m/Y', |
| | 'Y/m/d', |
| | 'd.m.Y', |
| | ); |
| |
|
| | if ($iso) { |
| | $formats = array_merge($formats, $isoFormats, $userFormats); |
| | } else { |
| | $formats = array_merge($formats, $userFormats); |
| | } |
| |
|
| | return array_unique($formats); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getDateTimeFormats($iso = false) |
| | { |
| | $formats = array( |
| | $this->getUserDateTimeFormat(), |
| | ); |
| |
|
| | foreach ($this->getDateFormats($iso) as $date) { |
| | foreach ($this->getTimeFormats() as $time) { |
| | $formats[] = $date.' '.$time; |
| | } |
| | } |
| |
|
| | return array_unique($formats); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getAllDateFormats($iso = false) |
| | { |
| | return array_merge($this->getDateFormats($iso), $this->getDateTimeFormats($iso)); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getAvailableFormats(array $formats) |
| | { |
| | $values = array(); |
| |
|
| | foreach ($formats as $format) { |
| | $values[$format] = date($format).' ('.$format.')'; |
| | } |
| |
|
| | return $values; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getParserFormats() |
| | { |
| | return array( |
| | $this->getUserDateFormat(), |
| | 'Y-m-d', |
| | 'Y_m_d', |
| | $this->getUserDateTimeFormat(), |
| | 'Y-m-d H:i', |
| | 'Y_m_d H:i', |
| | ); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getTimestamp($value) |
| | { |
| | if (ctype_digit((string) $value)) { |
| | return (int) $value; |
| | } |
| |
|
| | foreach ($this->getParserFormats() as $format) { |
| | $timestamp = $this->getValidDate($value, $format); |
| |
|
| | if ($timestamp !== 0) { |
| | return $timestamp; |
| | } |
| | } |
| |
|
| | return 0; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | private function getValidDate($value, $format) |
| | { |
| | $date = DateTime::createFromFormat($format, $value); |
| |
|
| | if ($date !== false) { |
| | $errors = DateTime::getLastErrors(); |
| | if ($errors === false || |
| | $errors['error_count'] === 0 && $errors['warning_count'] === 0) { |
| | $timestamp = $date->getTimestamp(); |
| | return $timestamp > 0 ? $timestamp : 0; |
| | } |
| | } |
| |
|
| | return 0; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function withinDateRange(DateTime $date, DateTime $start, DateTime $end) |
| | { |
| | return $date >= $start && $date <= $end; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getHours(DateTime $d1, DateTime $d2) |
| | { |
| | $seconds = abs($d1->getTimestamp() - $d2->getTimestamp()); |
| | return round($seconds / 3600, 2); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getIsoDate($value) |
| | { |
| | return date('Y-m-d', $this->getTimestamp($value)); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getTimestampFromIsoFormat($value) |
| | { |
| | return $this->removeTimeFromTimestamp(ctype_digit((string) $value) ? $value : strtotime($value)); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function removeTimeFromTimestamp($timestamp) |
| | { |
| | return mktime(0, 0, 0, date('m', $timestamp), date('d', $timestamp), date('Y', $timestamp)); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function format(array $values, array $fields, $format) |
| | { |
| | foreach ($fields as $field) { |
| | if (! empty($values[$field])) { |
| | if (ctype_digit((string) $values[$field])) { |
| | $values[$field] = date($format, $values[$field]); |
| | } |
| | } else { |
| | $values[$field] = ''; |
| | } |
| | } |
| |
|
| | return $values; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function convert(array $values, array $fields, $keep_time = false) |
| | { |
| | foreach ($fields as $field) { |
| | if (! empty($values[$field])) { |
| | $timestamp = $this->getTimestamp($values[$field]); |
| | $values[$field] = $keep_time ? $timestamp : $this->removeTimeFromTimestamp($timestamp); |
| | } |
| | } |
| |
|
| | return $values; |
| | } |
| | } |
| |
|