You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yii2中如何从DateTime提取时间格式?代码问题求助

解答:Yii2中提取DateTime时间格式及代码问题分析

我来帮你拆解这两个问题,一步步解决:

一、提取DateTime类型中的时间部分

针对你的场景,有两种常用方式:

1. 原生PHP直接处理时间戳

如果你是从date('Y-m-d H:i:s', strtotime('+5 hours'))生成的字符串里提取时间,直接修改date()的格式参数即可:

// 直接生成仅含时分秒的时间
$timeOnly = date('H:i:s', strtotime('+5 hours'));
// 输出示例:23:36:21

2. Yii2框架推荐的Formatter组件(更规范)

如果$model->date是ActiveRecord绑定的数据库DateTime字段,建议用Yii自带的Formatter组件,它能自动处理时区,更符合框架规范:

// 直接格式化时间部分
$timeOnly = Yii::$app->formatter->asTime($model->date);
// 默认输出H:i:s格式,也可以自定义格式
$timeOnly = Yii::$app->formatter->asTime($model->date, 'H:i:s');

二、为什么date("H:i:s", strtotime('-30 minutes'))得到00:30:00?

问题出在你没有指定基准时间:
strtotime('-30 minutes')默认是基于当前服务器时间减去30分钟,如果当前服务器时间刚好是01:00:00,减去30分钟自然会得到00:30:00。

如果你想在之前那个+5 hours的时间基础上减30分钟,需要把该时间作为基准传入strtotime:

// 方式1:基于时间戳计算
$originalTimestamp = strtotime('+5 hours');
$timeMinus30 = date('H:i:s', strtotime('-30 minutes', $originalTimestamp));

// 方式2:基于已生成的日期字符串计算
$originalDate = date('Y-m-d H:i:s', strtotime('+5 hours'));
$timeMinus30 = date('H:i:s', strtotime($originalDate . ' -30 minutes'));

这样就能得到你预期的23:06:21(基于示例中的2018-05-08 23:36:21减30分钟)。

内容的提问来源于stack exchange,提问作者Ardi Tan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:18:02