如何计算文件创建日期与当前日期的天数差?PHP实现求助
正确计算文件日期与当前日期的差值
你的代码核心问题是直接对字符串格式的日期做减法运算,PHP会把字符串强制转换为数值,结果完全不符合预期。另外需要注意:filemtime获取的是文件的最后修改时间,不是创建时间,不同系统获取创建时间的方式有差异。
错误原因分析
$crdatefile = date("Y-m-d H:i:s",filemtime($_filename))和$date1 = date("Y-m-d H:i:s")生成的都是字符串,直接用-相减会得到无意义的数值(比如"2024-05-20" - "2024-05-21"会被转换为2024 - 2024 = 0)。- 你提到的
DateTime::diff是PHP中处理日期差值的标准方案,应该用时间戳或DateTime对象来计算,而非字符串。
正确实现代码(以文件修改时间为例)
$_filename = realpath('test.txt'); if (file_exists($_filename)) { // 获取文件最后修改时间戳,转换为DateTime对象 $fileModifyDate = new DateTime(); $fileModifyDate->setTimestamp(filemtime($_filename)); // 当前时间的DateTime对象 $currentDate = new DateTime(); // 计算两个日期的差值,得到DateInterval对象 $dateDiff = $currentDate->diff($fileModifyDate); // 获取差值的总天数(正数表示当前时间晚于文件修改时间) $daysDiff = $dateDiff->days; echo "相差天数:{$daysDiff}____"; if ($daysDiff > 1) { // unlink($_filename); echo '文件已删除____'; } echo '执行后的文件状态____'; }
获取文件创建时间的差异处理
- Windows系统:可以用
filectime获取文件创建时间:$fileCreateDate = new DateTime(); $fileCreateDate->setTimestamp(filectime($_filename)); - Linux/Unix系统(PHP 7.1+):
filectime返回的是文件元数据(如权限)的修改时间,需要用stat获取创建时间:$fileStat = stat($_filename); $fileCreateDate = new DateTime(); $fileCreateDate->setTimestamp($fileStat['birthtime']);
关键注意事项
DateTime::diff返回的DateInterval对象包含y(年)、m(月)、d(日)、h(时)等精确差值字段,无需手动计算时间戳差值,避免闰年、不同月份天数的坑。- 若坚持用时间戳计算,需将两个时间都转为时间戳再相减:
$fileTime = filemtime($_filename); $currentTime = time(); $secondsDiff = abs($currentTime - $fileTime); $daysDiff = round($secondsDiff / (60 * 60 * 24));
内容的提问来源于stack exchange,提问作者Onur Topal
相关产品推荐
相关产品推荐

