如何在 PHP 中检查日期是 12 小时格式还是 24 小时格式?
How to check date if its 12 hour format or 24 hour format in PHP?
我想检查日期输入并将其转换为 24 小时格式。例如日期时间是:
$date="2021-02-5 11:45:00 AM"
在我用这个条件检查之后:
if (preg_match("/am|pm|AM|PM/", $date))
{
$date=date('Y-m-d H:i:s',strtotime("$date"));
}
我的输出应该是这样的,但它不会 return 像这样的日期格式:
$date="2021-02-5 11:45:00";
我该如何解决这个问题?
转换时间格式
// 24-hour time to 12-hour time
$time_in_12_hour_format = date("g:i a", strtotime("13:30"));
// 12-hour time to 24-hour time
$time_in_24_hour_format = date("H:i", strtotime("1:30 PM"));
date_create_from_format('Y-m-j H:i:s A', $date);
它会 return 一个 DateTime 对象,你可以得到你想要的正确日期,如果日期字符串与模式不匹配,它会 return false。
DateTime Object
(
[date] => 2021-02-05 11:45:00.000000
[timezone_type] => 3
[timezone] => UTC
)
date_create_from_format ( string $format , string $time , DateTimeZone $timezone = ? ) : DateTime
您不需要 regex
来检查是 24 小时还是 12 小时。您可以简单地将日期传递给 strtotime
函数以获取日期的时间戳,然后使用 date
函数格式化时间戳。
$date="2021-02-5 11:45:00 AM";
$date=date('Y-m-j H:i:s',strtotime($date));
echo $date; // 2021-02-5 11:45:00
使用 strtotime
您无法控制格式。要更好地掌握正在发生的事情,请使用功能丰富的 DateTime class。首先将字符串转换为 DateTime
对象,然后将其格式化为您需要的任何格式。
<?php
$dt = "2021-02-5 11:45:00 pm";
if (preg_match('/am$|pm$/i', $dt)) // is there an Ante meridiem/Post meridiem suffix?
{
$dtFormat = 'Y-n-j H:i:s a';
}
else
{
$dtFormat = 'Y-n-j H:i:s';
}
$ts = DateTime::createFromFormat($dtFormat, $dt);
$date = $ts -> format('Y-m-d H:i:s');
// echo 'Result: '. $date;
我想检查日期输入并将其转换为 24 小时格式。例如日期时间是:
$date="2021-02-5 11:45:00 AM"
在我用这个条件检查之后:
if (preg_match("/am|pm|AM|PM/", $date))
{
$date=date('Y-m-d H:i:s',strtotime("$date"));
}
我的输出应该是这样的,但它不会 return 像这样的日期格式:
$date="2021-02-5 11:45:00";
我该如何解决这个问题?
转换时间格式
// 24-hour time to 12-hour time
$time_in_12_hour_format = date("g:i a", strtotime("13:30"));
// 12-hour time to 24-hour time
$time_in_24_hour_format = date("H:i", strtotime("1:30 PM"));
date_create_from_format('Y-m-j H:i:s A', $date);
它会 return 一个 DateTime 对象,你可以得到你想要的正确日期,如果日期字符串与模式不匹配,它会 return false。
DateTime Object
(
[date] => 2021-02-05 11:45:00.000000
[timezone_type] => 3
[timezone] => UTC
)
date_create_from_format ( string $format , string $time , DateTimeZone $timezone = ? ) : DateTime
您不需要 regex
来检查是 24 小时还是 12 小时。您可以简单地将日期传递给 strtotime
函数以获取日期的时间戳,然后使用 date
函数格式化时间戳。
$date="2021-02-5 11:45:00 AM";
$date=date('Y-m-j H:i:s',strtotime($date));
echo $date; // 2021-02-5 11:45:00
使用 strtotime
您无法控制格式。要更好地掌握正在发生的事情,请使用功能丰富的 DateTime class。首先将字符串转换为 DateTime
对象,然后将其格式化为您需要的任何格式。
<?php
$dt = "2021-02-5 11:45:00 pm";
if (preg_match('/am$|pm$/i', $dt)) // is there an Ante meridiem/Post meridiem suffix?
{
$dtFormat = 'Y-n-j H:i:s a';
}
else
{
$dtFormat = 'Y-n-j H:i:s';
}
$ts = DateTime::createFromFormat($dtFormat, $dt);
$date = $ts -> format('Y-m-d H:i:s');
// echo 'Result: '. $date;