| <?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; |
| } |
| } |
|
|