如何通过PHP代码从Instagram文件名前缀提取日期?
通过PHP从Instagram文件名的数字前缀提取对应日期
完全可以实现,Instagram文件名中下划线前的数字是媒体ID,基于Snowflake算法生成,其中包含了时间戳信息,我们可以通过位运算提取并转换为可读日期。
实现步骤与代码示例
- 提取文件名中的媒体ID(下划线前的数字部分)
- 通过位运算从媒体ID中解析出时间偏移,结合Instagram的时间起始点计算Unix时间戳
- 将时间戳转换为所需格式的日期
<?php // 替换为你的目标文件名 $filename = '504273856298686966_186593000.mp4'; // 1. 提取下划线前的媒体ID $mediaId = explode('_', $filename)[0]; // 2. 解析时间戳:Instagram Snowflake起始于2010-01-01 UTC,媒体ID前41位是毫秒级时间偏移 $timestampMs = (int)$mediaId >> 23; $epochStart = strtotime('2010-01-01 00:00:00 UTC'); $unixTimestamp = $epochStart + ($timestampMs / 1000); // 3. 转换为可读日期,可自定义时区和格式 $date = (new DateTime())->setTimestamp($unixTimestamp); // 输出UTC标准日期 echo "UTC日期:" . $date->setTimezone(new DateTimeZone('UTC'))->format('Y-m-d H:i:s') . PHP_EOL; // 输出国内时区日期 echo "本地日期:" . $date->setTimezone(new DateTimeZone('Asia/Shanghai'))->format('Y-m-d H:i:s') . PHP_EOL; ?>
注意事项
- 确保PHP运行环境支持64位整数(主流服务器均支持,若为32位环境需用BCMath扩展处理大数字)
- 可根据需求调整日期格式(如
'Y-m-d'仅显示年月日)和时区
内容的提问来源于stack exchange,提问作者xrescom
相关产品推荐
相关产品推荐

