public static function jDateTime::parseFromFormat in Persian Date for Drupal 8 8.4
Parameters
$format:
$date:
Return value
array
2 calls to jDateTime::parseFromFormat()
- jDateTime::createDatetimeFromFormat in src/
Library/ Jalali/ jDateTime.php - PersianDrupalDateTime::createFromFormat in src/
Plugin/ Datetime/ PersianDrupalDateTime.php - Creates a date object from an input format.
File
- src/
Library/ Jalali/ jDateTime.php, line 693
Class
- jDateTime
- Class jDateTime @package Morilog\Jalali
Namespace
Drupal\persian_date\Library\JalaliCode
public static function parseFromFormat($format, $date) {
if ($format === 'Y-m-d') {
list($year, $month, $day) = explode('-', $date);
return [
'year' => $year,
'month' => $month,
'day' => $day,
'hour' => 12,
'minute' => 0,
'second' => 0,
];
}
// reverse engineer date formats
$keys = array(
'Y' => array(
'year',
'\\d{4}',
),
'y' => array(
'year',
'\\d{2}',
),
'm' => array(
'month',
'\\d{2}',
),
'n' => array(
'month',
'\\d{1,2}',
),
'M' => array(
'month',
'[A-Z][a-z]{3}',
),
'F' => array(
'month',
'[A-Z][a-z]{2,8}',
),
'd' => array(
'day',
'\\d{2}',
),
'j' => array(
'day',
'\\d{1,2}',
),
'D' => array(
'day',
'[A-Z][a-z]{2}',
),
'l' => array(
'day',
'[A-Z][a-z]{6,9}',
),
'u' => array(
'hour',
'\\d{1,6}',
),
'h' => array(
'hour',
'\\d{2}',
),
'H' => array(
'hour',
'\\d{2}',
),
'g' => array(
'hour',
'\\d{1,2}',
),
'G' => array(
'hour',
'\\d{1,2}',
),
'i' => array(
'minute',
'\\d{2}',
),
's' => array(
'second',
'\\d{2}',
),
);
// convert format string to regex
$regex = '';
$chars = str_split($format);
foreach ($chars as $n => $char) {
$lastChar = isset($chars[$n - 1]) ? $chars[$n - 1] : '';
$skipCurrent = '\\' == $lastChar;
if (!$skipCurrent && isset($keys[$char])) {
$regex .= '(?P<' . $keys[$char][0] . '>' . $keys[$char][1] . ')';
}
else {
if ('\\' == $char) {
$regex .= $char;
}
else {
$regex .= preg_quote($char);
}
}
}
$dt = array();
$dt['error_count'] = 0;
// now try to match it
if (preg_match('#^' . $regex . '$#', $date, $dt)) {
foreach ($dt as $k => $v) {
if (is_int($k)) {
unset($dt[$k]);
}
}
if (!jDateTime::checkdate($dt['month'], $dt['day'], $dt['year'], false)) {
$dt['error_count'] = 1;
}
}
else {
$dt['error_count'] = 1;
}
$dt['errors'] = array();
$dt['fraction'] = '';
$dt['warning_count'] = 0;
$dt['warnings'] = array();
$dt['is_localtime'] = 0;
$dt['zone_type'] = 0;
$dt['zone'] = 0;
$dt['is_dst'] = '';
if (strlen($dt['year']) == 2) {
$now = jDate::forge('now');
$x = $now
->format('Y') - $now
->format('y');
$dt['year'] += $x;
}
$dt['year'] = isset($dt['year']) ? (int) $dt['year'] : 0;
$dt['month'] = isset($dt['month']) ? (int) $dt['month'] : 0;
$dt['day'] = isset($dt['day']) ? (int) $dt['day'] : 0;
$dt['hour'] = isset($dt['hour']) ? (int) $dt['hour'] : 0;
$dt['minute'] = isset($dt['minute']) ? (int) $dt['minute'] : 0;
$dt['second'] = isset($dt['second']) ? (int) $dt['second'] : 0;
return $dt;
}