如何更高效优雅地从相对时间字符串获取PHP的DateTime对象?
如何更高效优雅地从相对时间字符串获取PHP的DateTime对象?
嘿,你这写法确实绕了没必要的弯子!其实PHP的DateTime类本身就直接支持解析相对时间字符串,完全不需要先经过strtotime转时间戳、再用date转字符串这两步多余操作,一步到位就能搞定。
你原来的代码相当于把时间戳→字符串→DateTime对象,多了两次无意义的类型转换,既啰嗦也没效率。直接把相对时间字符串传给DateTime的构造函数就好——它内部本身就集成了类似strtotime的解析能力,能直接返回你需要的DateTime对象:
<?php // 简化后的清爽写法 $firstfriday = new \DateTime('first Friday of March ' . $theYear); $firstsaturday = new \DateTime('first Saturday of March ' . $theYear);
是不是瞬间感觉代码干净多了?而且这种写法还能避免中间转换可能带来的潜在问题,比如不同时区下日期字符串格式的兼容性问题。
另外如果之后你需要基于某个基准时间做更灵活的时间调整,还可以用DateTime的modify方法,比如先定位到当年3月1日,再调整到第一个周五:
<?php $firstfriday = new \DateTime($theYear . '-03-01'); $firstfriday->modify('first Friday of this month');
不过针对你现在的需求,第一种直接构造的写法已经是最简洁高效的啦~
备注:内容来源于stack exchange,提问作者Matthew Brown aka Lord Matt
相关产品推荐
相关产品推荐

