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
相关产品推荐
相关产品推荐

