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

