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

如何在Laravel中获取文件的原始最后修改日期(非UTC转换后)

解决Laravel中File::lastModified()时间与Windows显示不一致的问题

嘿,我懂你遇到的这个时区差问题——Unix时间戳本质上是基于UTC的,而Windows资源管理器显示的是你本地时区的时间,所以才会出现4小时的偏差。下面给你几个简单的解决办法:

方法一:手动为DateTime设置本地时区

DateTime::createFromFormat()默认会使用PHP的默认时区(通常是UTC),你只需要把转换后的时间对象切换到你的本地时区就行:

$filename = '你的文件路径';
$lastmodified = File::lastModified($filename);
// 创建DateTime时直接指定本地时区,比如美国东部时区(UTC-4)
$lastmodified = DateTime::createFromFormat("U", $lastmodified, new DateTimeZone('America/New_York'));
// 或者先创建再设置时区
// $lastmodified->setTimezone(new DateTimeZone('America/New_York'));
echo $lastmodified->format('Y-m-d H:i:s');

方法二:用Laravel自带的Carbon类处理(更推荐)

Laravel自带的Carbon库对时区处理非常友好,用它来转换会更简洁:

use Carbon\Carbon;

$filename = '你的文件路径';
$lastmodified = File::lastModified($filename);
// 转换到指定时区
$lastmodified = Carbon::createFromTimestamp($lastmodified)->tz('America/New_York');
// 如果你的Laravel配置里已经设置了正确的本地时区(config/app.php中的timezone项),可以直接用toLocalTime()
// $lastmodified = Carbon::createFromTimestamp($lastmodified)->toLocalTime();
echo $lastmodified->format('Y-m-d H:i:s');

小提示

你需要确认自己对应的时区标识符是什么,比如中国时区是Asia/Shanghai,美国东部夏令时是America/New_York。可以通过DateTimeZone::listIdentifiers()函数查看所有可用的时区列表。另外,建议检查下Laravel的config/app.php里的timezone配置,或者PHP配置文件php.ini中的date.timezone,把它们设置成和你Windows系统一致的时区,这样后续处理时间类问题会更省心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:11:08