如何在PHP和Cakephp中从日期获取小时数?

33
我想使用PHP和Cakephp函数从日期中仅获取小时。
$date = "2011-07-26 20:05:00";

$hours = ?
8个回答

66

使用 Datetime 类(PHP 5.3 或更高版本)。

$dt = DateTime::createFromFormat("Y-m-d H:i:s", "2011-07-26 20:05:00");
$hours = $dt->format('H'); // '20'

48

根据“小时”我理解您的意思是,如果时间是晚上8点或者20:00这样,在您的时间字符串中...

$date = "2011-07-26 20:05:00";
$date = strtotime($date);
echo date('H', $date);

我对PHP的日期格式不是很了解,所以您需要参考PHP.net获取正确的格式化字符。


在此之前,您需要使用strtotime()将$date转换为Unix时间戳才能使其正常工作... - 472084
第一个版本实际上由于日期格式错误而返回了一个错误,因此使用strtotime将日期重新格式化为Unix时间戳。 - ShoeLace1291
1
Clement的下面的回答应该真正成为新的被接受的答案。在2017年,使用DateTime类将是最可靠的方法。strtotime有时会给出奇怪的结果,而且你会失去控制,而DateTime :: createFromFormat则更加可靠/一致/可预测。 - Wes

1

对于24小时和12小时制,请查看以下代码:

    $date = "2011-07-26 20:05:00";
    echo $hours = date('G', strtotime($date)); // In 24-hour format of an hour without leading zeros
    echo '<br>';
    echo $hours = date('g', strtotime($date)); // 12-hour format of an hour without leading zeros
    // For current timestamp
    echo $hours = date('G'); // In 24-hour format of an hour without leading zeros
    echo '<br>';
    echo $hours = date('g'); //12-hour format of an hour without leading zeros

请参考:http://php.net/manual/en/function.date.php


1
date_parse函数将返回一个已填充的日期时间部分数组。使用方法如下:
    $now = date(now()); // "2021-08-30 21:52:21"
    $open = date_parse($now)['hour']; // 21

1
最好在代码的详细解释中提供。即使您认为它可以解决OP的问题,您的答案也应准备得足够有用,以便于所有遇到类似问题的人。请改进您的答案。 - akash
1
感谢您修改我的答案。我刚开始回答问题。下次我会注意您的建议。 - Yuri

1

使用 DateTime 类的最佳方法

$my_sql_date = "2011-07-26 20:05:00";
$date_time_obj = new DateTime($my_sql_date);
echo $date_time_obj->format('H');

1
在php端使用date('H',strtotime($date));,在mysql端可以使用DATE_FORMAT(NOW(),'%H')来获取小时。 $date包含的日期格式为'2014/08/14'。
要将日期从'2014/08/14'转换为'14-08-2014',您需要使用:
date('d-m-Y',strtotime($date));

OR use

date('d-m-Y',strtotime(str_replace('/','-',$date)))

0

$pattern = '[0-9]{2}:[0-9]{2}'; preg_match('/'.$pattern.'/', '2011-07-26 20:05:00', $matches); echo $matches[0];

的翻译内容:


2
请稍微解释一下。谢谢! - Failed Scientist

0
从CakePHP 4.0+开始,您可以使用FrozenTime实用程序类。只需导入即可。
在控制器中:
use Cake\I18n\FrozenTime;
        
class ExampleController extends AppController {
    public function getHour() {
        $now = FrozenTime::now();
        $hour = $now->hour;
        $this->set(compact('hour'));
    }
}

然后在你的视图中:

<?= $hour ?>

它应该输出类似于这样的内容(假设当前时间是下午2:30):
14

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接