请求Carbon::parse()支持字符串格式时间戳输入
解决Carbon::parse()无法解析字符串时间戳的通用方案
你遇到的问题很典型——Carbon::parse()确实没法直接处理纯数字字符串形式的时间戳,原因是底层的PHP DateTime会把这类字符串尝试解析为日期格式(比如把1589283012拆成年份1589、月份28,这显然不符合规则),所以才会抛出解析错误。
这里给你一个简洁且通用的解决方案,既能处理各种常规日期时间字符串,也能直接接收数字/字符串格式的时间戳:
// 一行代码搞定通用解析 $carbonDate = is_numeric($input) ? Carbon::createFromTimestamp((int)$input) : Carbon::parse($input);
细节说明:
is_numeric($input)会同时识别数字类型的时间戳,以及字符串形式的纯数字时间戳(比如"1589283012")- 用
(int)转换是为了确保即使输入是带小数的时间戳字符串(比如"1589283012.456"),也能被正确转为秒级时间戳;如果需要保留毫秒精度,可以改成(float)并使用Carbon::createFromTimestampMs()(针对毫秒时间戳) - 对于常规的日期字符串(比如
"2020-05-12 14:30:12"、"last Friday"等),依然会通过Carbon::parse()正常解析
如果需要频繁使用这个逻辑,也可以封装成一个简单的辅助函数:
function parseUniversalDate($input) { return is_numeric($input) ? Carbon::createFromTimestamp((int)$input) : Carbon::parse($input); }
这样不管传入的是日期字符串、数字时间戳还是字符串时间戳,都能得到正确的Carbon实例。
内容的提问来源于stack exchange,提问作者Karol Sobański
相关产品推荐
相关产品推荐

