やりたいこと
'2019-10-09 01:20:33'
というmysqlに登録されているdatetime形式のデータを
$datetime = [
'year' => '2019',
'month' => '10',
'day' => '09',
'hour' => '01',
'minute' => '20',
'second' => '33',
];
といった配列形式にしたり
$day = hogehoge('2019-10-09 01:20:33'); // 09
と、ぱっと取得できるようにしたい。
配列形式にする
// 一般的なdatetime
$datetime1 = getDateTimeArray('2019-10-09 01:20:33');
$datetime2 = getDateTimeArray('2019/10/09 01:20:33');
// 特殊な場合はformatオプションを付ける
$datetime3 = getDateTimeArray('2019年10月09日01時20分33秒', 'Y年m月d日H時i分s秒');
function getDateTimeArray($datetime, $format = '')
{
if (empty$format) {
$date = new DateTime($datetime);
} else {
$date= DateTime::createFromFormat($datetime, $format);
}
$datetime_key = ['year', 'month', 'day', 'hour', 'minute', 'second'];
return array_combine(
$datetime_key,
preg_split('/[-: ]/', $date->format('Y-m-d H:i:s'))
);
}
日付だけほしい
// 一行で
$day1 = date_create('2019-10-09 01:20:33')->format('d');
$day2 = DateTime::createFromFormat('Y年m月d日H時i分s秒', '2019年10月09日01時20分33秒')->format('d');
関数使ったほうが見やすいかな
// 一般的なdatetime
$day1 = getDateTimeByFormat('2019-10-09 01:20:33', 'd');
// 特殊な場合
$day2 = getDateTimeByFormat('2019年10月09日01時20分33秒', 'd', 'Y年m月d日H時i分s秒');
function getDateTimeByFormat($datetime, $format, $create_format = "")
{
if (empty($create_format)) {
return date_create($datetime)->format($format);
} else {
return DateTime::createFromFormat($create_format, $datetime)->format($format);
}
}
日付以外表示しないならこれでもいいがちょっと長い。