具有DateTime或strtotime的相对下一个最接近的时钟时间单位

问题描述 投票:1回答:1

我正在使用DateTime构造函数或strtotime函数的格式,从现在开始获取下一个最接近的next {clocktime unit}。>

让我演示问题。我正在尝试获取下一个最接近的下午4点。

想象现在是下午4:30,下一个最接近的下午4点应该是明天下午4点。几天来,它就像next {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 hours 4pm输出此:

string(19) "2020-06-11 16:00:00"

所以我去了php文档,我发现了这个note

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

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

因此,我尝试了其他一些利用这些异常的方法,但似乎没有任何用处-因此,我尝试在网上四处张望,发现很多人都在尝试类似的东西,但没有完全一样的东西。

当然,可以进行一些额外的处理,但是我对纯1 strtotime / DateTime解决方案感兴趣。我想知道我是否缺少简单的东西,或者不可能?

我正在使用DateTime构造函数或strtotime函数中的格式,从现在开始获取下一个最接近的下一个{clocktime unit}。让我演示一下问题。我正在尝试获取下一个...

php datetime strtotime
1个回答
0
投票

您接近。将您的相对时间分成两部分:

© www.soinside.com 2019 - 2024. All rights reserved.