PHP日期函数获取日/月/年方法及日期字符串格式化失败求助
嘿,我来帮你搞定这两个PHP日期相关的问题!
问题1:如何在PHP中获取日、月和年?
分两种场景来处理:
获取当前日期的日、月、年
直接用date()函数就行,不同的格式符对应不同的日期部分:- 日:
date('d')(带前导零的两位数字,比如05)或date('j')(不带前导零,比如5) - 月:
date('m')(两位数字)、date('n')(不带前导零)、date('M')(英文缩写,比如Oct)、date('F')(完整英文月份,比如October) - 年:
date('Y')(四位数字,比如2019)或date('y')(两位数字,比如19)
示例代码:
$currentDay = date('d'); $currentMonth = date('M'); $currentYear = date('Y'); echo "今天是 {$currentYear} 年 {$currentMonth} 月 {$currentDay} 日";- 日:
获取指定日期的日、月、年
可以先把日期字符串转成时间戳,或者用更灵活的DateTime类:
用时间戳的方式:$targetDate = '2019-10-19'; $timestamp = strtotime($targetDate); $day = date('d', $timestamp); $month = date('M', $timestamp); $year = date('Y', $timestamp);用
DateTime类(更推荐,处理复杂日期更靠谱):$date = new DateTime('2019-10-19'); $day = $date->format('d'); $month = $date->format('M'); $year = $date->format('Y');
问题2:格式化字符串日期为「Oct 01, 2019」形式
你遇到的问题很明确:$my_Schedule是一个字符串(从var_dump的输出能看到它是string类型,内容是"Reviews created : 2019-10-19 03:47:57"),但date()函数的第二个参数要求的是Unix时间戳,不是字符串,所以直接传进去肯定没法正常工作。
给你两个解决方法:
方法一:提取日期部分 + 转时间戳格式化
先从字符串里把日期时间部分提取出来,再转成时间戳后用date()格式化:
// 提取日期时间部分:从冒号后截取并去掉多余空格 $dateStr = trim(strstr($my_Schedule, ':')); // 转成Unix时间戳 $timestamp = strtotime($dateStr); // 格式化为你要的「Oct 19, 2019」形式 echo date('M d, Y', $timestamp);
如果担心字符串格式变化,用正则提取更稳妥:
// 用正则匹配日期时间格式 preg_match('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/', $my_Schedule, $matches); if (!empty($matches[0])) { $timestamp = strtotime($matches[0]); echo date('M d, Y', $timestamp); }
方法二:用DateTime类直接解析(更推荐)
DateTime类的createFromFormat方法可以直接按照指定格式解析字符串,不需要转时间戳,处理各种日期格式更灵活:
// 先提取日期时间部分 $dateStr = trim(strstr($my_Schedule, ':')); // 按照原日期格式解析字符串 $date = DateTime::createFromFormat('Y-m-d H:i:s', $dateStr); // 输出目标格式 echo $date->format('M d, Y');
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

