Laravel技术实现:如何从日期中显示星期名称
在Laravel中提取并显示日期的星期名称
嘿,刚好处理过类似需求!在Laravel里处理日期,首选框架自带的Carbon扩展(Laravel默认已经集成,不用额外安装),比原生PHP日期函数省心太多,当然也可以优化你现有的代码方案,下面给你详细说说:
一、推荐方案:用Carbon优雅处理(Laravel专属)
Carbon是PHP日期处理的黄金标准,Laravel默认用它来处理模型的时间字段,提取星期名称超简单:
- 获取完整星期名称(比如
Friday):Carbon::parse($date)->format('l') - 获取缩写星期名称(比如
Fri):Carbon::parse($date)->format('D')
示例:生成指定年月的带星期日期数组
如果你要生成某个月的所有日期+星期的数组,用Carbon可以少写很多冗余代码:
// Laravel控制器里一般自动引入,手动引入的话加这行 use Carbon\Carbon; $month = 12; $year = 2019; // 创建当月第一天的Carbon实例 $firstDayOfMonth = Carbon::create($year, $month, 1); $daysWithWeekday = []; // 遍历当月所有天数(Carbon自带daysInMonth属性,不用自己计算) for ($i = 0; $i < $firstDayOfMonth->daysInMonth; $i++) { $currentDate = $firstDayOfMonth->copy()->addDays($i); // 按需求格式拼接,这里是「年-月-日 星期缩写」 $daysWithWeekday[] = $currentDate->format('Y-m-d D'); // 要完整星期名的话,把格式改成 'Y-m-d l' 即可 } echo json_encode($daysWithWeekday, JSON_PRETTY_PRINT);
为什么推荐这个方案?
- 不用自己拼接日期字符串、规避
strtotime的兼容性坑 - Carbon自带大量实用方法(比如获取当月天数、加减日期),代码可读性拉满
- 后续扩展需求(比如过滤周末、计算日期间隔)时,直接调用Carbon方法就行
二、优化你提供的原生PHP代码
如果你暂时不想用Carbon,也可以优化你现有的代码,解决一些潜在问题(比如原代码里sprintf的格式符错误):
$month = 12; $year = 2019; // 用mktime生成当月天数,比strtotime拼接字符串更可靠 $dayCount = date('t', mktime(0, 0, 0, $month, 1, $year)); $days = []; for ($i = 1; $i <= $dayCount; $i++) { // 直接用mktime生成当前日期的时间戳,避免字符串解析问题 $timestamp = mktime(0, 0, 0, $month, $i, $year); // 一步生成所需格式,去掉冗余中间变量 $days[] = date('Y-m-d D', $timestamp); } echo json_encode($days, JSON_PRETTY_PRINT);
优化点说明:
- 替换
strtotime为mktime:避免不同服务器环境下日期格式解析的兼容性问题 - 去掉冗余的
tempDate变量:直接通过时间戳生成最终格式,减少代码复杂度 - 修复原代码的
sprintf格式错误:原代码用%02s处理3字符的星期缩写,会导致格式异常,直接用date函数一步到位更准确
额外补充:Laravel视图中直接显示
如果是在Blade视图里要显示日期的星期名称,可以直接用Blade语法快速处理:
{{-- 显示完整星期名 --}} {{ \Carbon\Carbon::parse($yourDate)->format('l') }} {{-- 显示缩写星期名 --}} {{ \Carbon\Carbon::parse($yourDate)->format('D') }}
内容的提问来源于stack exchange,提问作者Fenz
相关产品推荐
相关产品推荐

