2 回答
TA贡献1851条经验 获得超4个赞
您可以根据输入日期字符串的长度创建格式函数。
$formats = [
10 => function($string) { return date_create_from_format('Y/m/d', $string); },
7 => function($string) { return date_create_from_format('Y-m j', $string . ' 1'); },
6 => function($string) { return date_create_from_format('M/y j', $string . ' 1'); }
];
然后使用这些函数创建您的日期
$date = $formats[strlen($a_date_string)]($a_date_string);
我将 1 附加到格式函数中的字符串以将日期设置为该月的第一天。
TA贡献1862条经验 获得超6个赞
您可以创建一个与此类似的脚本并多次运行它并对其进行调整,直到获得所有日期格式。
// should be listed from more specific to least specific date format
$dateFormats = [
'Y/m/d' => ['midnight'],
'Y-m' => ['midnight', 'first day of this month'],
'M/y' => ['midnight', 'first day of this month'],
];
$dates = [
'2015/01/01',
'2015-01',
'jan/18',
];
foreach ($dates as $date) {
if ($dateTime = getDateTimeFrom($date, $dateFormats)) {
echo "{$dateTime->format('Y-m-d H:i:s')} \n";
} else {
echo "Unknown date format : {$date} \n";
}
}
function getDateTimeFrom(string $dateString, array $dateFormats) : ?\DateTime {
if (!$dateString) {
return null;
}
foreach ($dateFormats as $format => $modifiers) {
if ($dateTime = \DateTime::createFromFormat($format, $dateString)) {
foreach ($modifiers as $modification) {
$dateTime->modify($modification);
}
return $dateTime;
}
}
return null;
}
// Outputs:
// 2015-01-01 00:00:00
// 2015-01-01 00:00:00
// 2018-01-01 00:00:00
- 2 回答
- 0 关注
- 139 浏览
添加回答
举报