The date time format can be chosen in application settings
This commit is contained in:
@@ -12,6 +12,141 @@ use DateTime;
|
||||
*/
|
||||
class DateParser extends Base
|
||||
{
|
||||
/**
|
||||
* List of time formats
|
||||
*
|
||||
* @access public
|
||||
* @return string[]
|
||||
*/
|
||||
public function getTimeFormats()
|
||||
{
|
||||
return array(
|
||||
'H:i',
|
||||
'g:i a',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* List of date formats
|
||||
*
|
||||
* @access public
|
||||
* @param boolean $iso
|
||||
* @return string[]
|
||||
*/
|
||||
public function getDateFormats($iso = false)
|
||||
{
|
||||
$iso_formats = array(
|
||||
'Y-m-d',
|
||||
'Y_m_d',
|
||||
);
|
||||
|
||||
$user_formats = array(
|
||||
'm/d/Y',
|
||||
'd/m/Y',
|
||||
'Y/m/d',
|
||||
'd.m.Y',
|
||||
);
|
||||
|
||||
return $iso ? array_merge($iso_formats, $user_formats) : $user_formats;
|
||||
}
|
||||
|
||||
/**
|
||||
* List of datetime formats
|
||||
*
|
||||
* @access public
|
||||
* @param boolean $iso
|
||||
* @return string[]
|
||||
*/
|
||||
public function getDateTimeFormats($iso = false)
|
||||
{
|
||||
$formats = array();
|
||||
|
||||
foreach ($this->getDateFormats($iso) as $date) {
|
||||
foreach ($this->getTimeFormats() as $time) {
|
||||
$formats[] = $date.' '.$time;
|
||||
}
|
||||
}
|
||||
|
||||
return $formats;
|
||||
}
|
||||
|
||||
/**
|
||||
* List of all date formats
|
||||
*
|
||||
* @access public
|
||||
* @param boolean $iso
|
||||
* @return string[]
|
||||
*/
|
||||
public function getAllDateFormats($iso = false)
|
||||
{
|
||||
return array_merge($this->getDateFormats($iso), $this->getDateTimeFormats($iso));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get available formats (visible in settings)
|
||||
*
|
||||
* @access public
|
||||
* @param array $formats
|
||||
* @return array
|
||||
*/
|
||||
public function getAvailableFormats(array $formats)
|
||||
{
|
||||
$values = array();
|
||||
|
||||
foreach ($formats as $format) {
|
||||
$values[$format] = date($format);
|
||||
}
|
||||
|
||||
return $values;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a date and return a unix timestamp, try different date formats
|
||||
*
|
||||
* @access public
|
||||
* @param string $value Date to parse
|
||||
* @return integer
|
||||
*/
|
||||
public function getTimestamp($value)
|
||||
{
|
||||
if (ctype_digit($value)) {
|
||||
return (int) $value;
|
||||
}
|
||||
|
||||
foreach ($this->getAllDateFormats(true) as $format) {
|
||||
$timestamp = $this->getValidDate($value, $format);
|
||||
|
||||
if ($timestamp !== 0) {
|
||||
return $timestamp;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a timestamp if the given date format is correct otherwise return 0
|
||||
*
|
||||
* @access private
|
||||
* @param string $value Date to parse
|
||||
* @param string $format Date format
|
||||
* @return integer
|
||||
*/
|
||||
private function getValidDate($value, $format)
|
||||
{
|
||||
$date = DateTime::createFromFormat($format, $value);
|
||||
|
||||
if ($date !== false) {
|
||||
$errors = DateTime::getLastErrors();
|
||||
if ($errors['error_count'] === 0 && $errors['warning_count'] === 0) {
|
||||
$timestamp = $date->getTimestamp();
|
||||
return $timestamp > 0 ? $timestamp : 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if the date is within the date range
|
||||
*
|
||||
@@ -54,50 +189,7 @@ class DateParser extends Base
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a timestamp if the given date format is correct otherwise return 0
|
||||
*
|
||||
* @access public
|
||||
* @param string $value Date to parse
|
||||
* @param string $format Date format
|
||||
* @return integer
|
||||
*/
|
||||
public function getValidDate($value, $format)
|
||||
{
|
||||
$date = DateTime::createFromFormat($format, $value);
|
||||
|
||||
if ($date !== false) {
|
||||
$errors = DateTime::getLastErrors();
|
||||
if ($errors['error_count'] === 0 && $errors['warning_count'] === 0) {
|
||||
$timestamp = $date->getTimestamp();
|
||||
return $timestamp > 0 ? $timestamp : 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a date and return a unix timestamp, try different date formats
|
||||
*
|
||||
* @access public
|
||||
* @param string $value Date to parse
|
||||
* @return integer
|
||||
*/
|
||||
public function getTimestamp($value)
|
||||
{
|
||||
foreach ($this->getAllFormats() as $format) {
|
||||
$timestamp = $this->getValidDate($value, $format);
|
||||
|
||||
if ($timestamp !== 0) {
|
||||
return $timestamp;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ISO8601 date from user input
|
||||
* Get ISO-8601 date from user input
|
||||
*
|
||||
* @access public
|
||||
* @param string $value Date to parse
|
||||
@@ -105,96 +197,31 @@ class DateParser extends Base
|
||||
*/
|
||||
public function getIsoDate($value)
|
||||
{
|
||||
return date('Y-m-d', ctype_digit($value) ? $value : $this->getTimestamp($value));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all combinations of date/time formats
|
||||
*
|
||||
* @access public
|
||||
* @return string[]
|
||||
*/
|
||||
public function getAllFormats()
|
||||
{
|
||||
$formats = array();
|
||||
|
||||
foreach ($this->getDateFormats() as $date) {
|
||||
foreach ($this->getTimeFormats() as $time) {
|
||||
$formats[] = $date.' '.$time;
|
||||
}
|
||||
}
|
||||
|
||||
return array_merge($formats, $this->getDateFormats());
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the list of supported date formats (for the parser)
|
||||
*
|
||||
* @access public
|
||||
* @return string[]
|
||||
*/
|
||||
public function getDateFormats()
|
||||
{
|
||||
return array(
|
||||
$this->config->get('application_date_format', 'm/d/Y'),
|
||||
'Y-m-d',
|
||||
'Y_m_d',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the list of supported time formats (for the parser)
|
||||
*
|
||||
* @access public
|
||||
* @return string[]
|
||||
*/
|
||||
public function getTimeFormats()
|
||||
{
|
||||
return array(
|
||||
'H:i',
|
||||
'g:i A',
|
||||
'g:iA',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the list of available date formats (for the config page)
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getAvailableFormats()
|
||||
{
|
||||
return array(
|
||||
'm/d/Y' => date('m/d/Y'),
|
||||
'd/m/Y' => date('d/m/Y'),
|
||||
'Y/m/d' => date('Y/m/d'),
|
||||
'd.m.Y' => date('d.m.Y'),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the time from a timestamp
|
||||
*
|
||||
* @access public
|
||||
* @param integer $timestamp Timestamp
|
||||
* @return integer
|
||||
*/
|
||||
public function removeTimeFromTimestamp($timestamp)
|
||||
{
|
||||
return mktime(0, 0, 0, date('m', $timestamp), date('d', $timestamp), date('Y', $timestamp));
|
||||
return date('Y-m-d', $this->getTimestamp($value));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a timetstamp from an ISO date format
|
||||
*
|
||||
* @access public
|
||||
* @param string $date
|
||||
* @param string $value
|
||||
* @return integer
|
||||
*/
|
||||
public function getTimestampFromIsoFormat($date)
|
||||
public function getTimestampFromIsoFormat($value)
|
||||
{
|
||||
return $this->removeTimeFromTimestamp(ctype_digit($date) ? $date : strtotime($date));
|
||||
return $this->removeTimeFromTimestamp(ctype_digit($value) ? $value : strtotime($value));
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the time from a timestamp
|
||||
*
|
||||
* @access public
|
||||
* @param integer $timestamp
|
||||
* @return integer
|
||||
*/
|
||||
public function removeTimeFromTimestamp($timestamp)
|
||||
{
|
||||
return mktime(0, 0, 0, date('m', $timestamp), date('d', $timestamp), date('Y', $timestamp));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -204,13 +231,10 @@ class DateParser extends Base
|
||||
* @param array $values Database values
|
||||
* @param string[] $fields Date fields
|
||||
* @param string $format Date format
|
||||
* @return array
|
||||
*/
|
||||
public function format(array &$values, array $fields, $format = '')
|
||||
public function format(array $values, array $fields, $format)
|
||||
{
|
||||
if ($format === '') {
|
||||
$format = $this->config->get('application_date_format');
|
||||
}
|
||||
|
||||
foreach ($fields as $field) {
|
||||
if (! empty($values[$field])) {
|
||||
$values[$field] = date($format, $values[$field]);
|
||||
@@ -218,23 +242,28 @@ class DateParser extends Base
|
||||
$values[$field] = '';
|
||||
}
|
||||
}
|
||||
|
||||
return $values;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert date (form input data)
|
||||
* Convert date to timestamp
|
||||
*
|
||||
* @access public
|
||||
* @param array $values Database values
|
||||
* @param string[] $fields Date fields
|
||||
* @param boolean $keep_time Keep time or not
|
||||
* @return array
|
||||
*/
|
||||
public function convert(array &$values, array $fields, $keep_time = false)
|
||||
public function convert(array $values, array $fields, $keep_time = false)
|
||||
{
|
||||
foreach ($fields as $field) {
|
||||
if (! empty($values[$field]) && ! is_numeric($values[$field])) {
|
||||
if (! empty($values[$field])) {
|
||||
$timestamp = $this->getTimestamp($values[$field]);
|
||||
$values[$field] = $keep_time ? $timestamp : $this->removeTimeFromTimestamp($timestamp);
|
||||
}
|
||||
}
|
||||
|
||||
return $values;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user