public static function parseLocalizedDate($date, $format = null, $type = 'start')
{
$date = trim($date);
$i18n = [strtolower(__d('tools', 'Today')) => ['start' => date(FORMAT_DB_DATETIME, mktime(0, 0, 0, date('m'), date('d'), date('Y'))), 'end' => date(FORMAT_DB_DATETIME, mktime(23, 59, 59, date('m'), date('d'), date('Y')))], strtolower(__d('tools', 'Tomorrow')) => ['start' => date(FORMAT_DB_DATETIME, mktime(0, 0, 0, date('m'), date('d'), date('Y')) + DAY), 'end' => date(FORMAT_DB_DATETIME, mktime(23, 59, 59, date('m'), date('d'), date('Y')) + DAY)], strtolower(__d('tools', 'Yesterday')) => ['start' => date(FORMAT_DB_DATETIME, mktime(0, 0, 0, date('m'), date('d'), date('Y')) - DAY), 'end' => date(FORMAT_DB_DATETIME, mktime(23, 59, 59, date('m'), date('d'), date('Y')) - DAY)], strtolower(__d('tools', 'The day after tomorrow')) => ['start' => date(FORMAT_DB_DATETIME, mktime(0, 0, 0, date('m'), date('d'), date('Y')) + 2 * DAY), 'end' => date(FORMAT_DB_DATETIME, mktime(23, 59, 59, date('m'), date('d'), date('Y')) + 2 * DAY)], strtolower(__d('tools', 'The day before yesterday')) => ['start' => date(FORMAT_DB_DATETIME, mktime(0, 0, 0, date('m'), date('d'), date('Y')) - 2 * DAY), 'end' => date(FORMAT_DB_DATETIME, mktime(23, 59, 59, date('m'), date('d'), date('Y')) - 2 * DAY)]];
if (isset($i18n[strtolower($date)])) {
return $i18n[strtolower($date)][$type];
}
if ($format) {
$res = DateTime::createFromFormat($format, $date);
$res = $res->format(FORMAT_DB_DATE) . ' ' . ($type === 'end' ? '23:59:59' : '00:00:00');
return $res;
}
if (strpos($date, '.') !== false) {
$explode = explode('.', $date, 3);
$explode = array_reverse($explode);
} elseif (strpos($date, '/') !== false) {
$explode = explode('/', $date, 3);
$explode = array_reverse($explode);
} elseif (strpos($date, '-') !== false) {
$explode = explode('-', $date, 3);
} else {
$explode = [$date];
}
if ($explode) {
$count = count($explode);
for ($i = 0; $i < $count; $i++) {
$explode[$i] = static::pad($explode[$i]);
}
$explode[0] = static::pad($explode[0], 4, '20');
if (count($explode) === 3) {
return implode('-', $explode) . ' ' . ($type === 'end' ? '23:59:59' : '00:00:00');
}
if (count($explode) === 2) {
return implode('-', $explode) . '-' . ($type === 'end' ? static::daysInMonth($explode[0], $explode[1]) : '01') . ' ' . ($type === 'end' ? '23:59:59' : '00:00:00');
}
return $explode[0] . '-' . ($type === 'end' ? '12' : '01') . '-' . ($type === 'end' ? '31' : '01') . ' ' . ($type === 'end' ? '23:59:59' : '00:00:00');
}
return '';
}