Php 带有DateTime或StrotTime的相对次最近时钟时间单位

Php 带有DateTime或StrotTime的相对次最近时钟时间单位,php,datetime,strtotime,Php,Datetime,Strtotime,我希望从现在开始使用DateTime构造函数或strtotime函数中的格式获取下一个最近的next{clocktime unit} 让我演示一下这个问题。我正设法在下午4点到达下一个最近的时间 假设现在是下午4:30,下一个最近的下午4点应该是明天下午4点。几天来,它就像下一天{day}一样简单,所以我自然而然地尝试了 (new DateTime("next 4pm"))->format('Y-m-d H:i:s'); // invalid (new DateTime("next 16:

我希望从现在开始使用DateTime构造函数或strtotime函数中的格式获取下一个最近的
next{clocktime unit}

让我演示一下这个问题。我正设法在下午4点到达下一个最近的时间

假设现在是下午4:30,下一个最近的下午4点应该是明天下午4点。几天来,它就像
下一天{day}
一样简单,所以我自然而然地尝试了

(new DateTime("next 4pm"))->format('Y-m-d H:i:s'); // invalid
(new DateTime("next 16:00"))->format('Y-m-d H:i:s'); // invalid
所以,我开始讨论这个问题

(new DateTime(""))->format('Y-m-d H:i:s');
(new DateTime("4pm"))->format('Y-m-d H:i:s');
(new DateTime("+8 hours"))->format('Y-m-d H:i:s');
(new DateTime("+8 hours 4pm"))->format('Y-m-d H:i:s');
这将产生以下输出:

string(19) "2020-06-10 16:47:10" // now
string(19) "2020-06-10 16:00:00" // 4pm
string(19) "2020-06-11 00:47:10" // +8 hours
string(19) "2020-06-11 00:00:00" // +8 hours 4pm ??
其中,正如我所期望的那样,
+8小时下午4点
将输出以下内容:

string(19) "2020-06-11 16:00:00"
所以我去了php文档,我找到了这个

相对语句总是在非相对语句之后处理。这使得“2008年7月+1周”和“2008年7月+1周”相等

这条规则的例外情况是:“昨天”、“午夜”、“今天”、“中午”和“明天”。请注意,“明天11:00”和“明天11:00”是不同的。考虑到今天的日期“2008年7月23日”,第一个生成“2008-07-24 11:00”,而第二个生成“2008-07-24 00:00”。原因是这五条语句直接影响当前时间

因此,我尝试了一些利用这些异常的其他方法,但似乎没有得到任何有用的结果。因此,我尝试在网上四处寻找,发现很多人都在尝试类似的方法,但完全不是这样


当然,通过一些额外的处理是可能的,但我对纯1 strotime/DateTime解决方案感兴趣。我想知道我是否遗漏了一些简单的东西,或者这是不可能的。

你很接近了。将你的相对时间分成两部分:

  • 从现在起设置为8小时
  • 设定为下午4点
  • 输出:

    2020-06-11 16:00:00
    
    2020-06-11 16:00:00