查找给定时间戳记后给定时间的下一次出现

时间:2019-02-26 15:24:25

标签: php php-carbon

给出任意时间戳记(例如2019-02-26 10:30:00),我想查找下一次出现的任意时间。

例如,下一次出现的12:00:00将是2019-02-26 12:00:00,而下一次出现的09:00:00将是第二天的2019-02-27 09:00:00。结果可能是CarbonDatetime对象。测试时间将只是一个字符串,如图所示。

有没有一种方法可以在本地PHP或PHP Carbon中进行计算,而无需在时间段内进行有条件的装箱。一个明显的方法是查看所测试的时间是否超过了today的检查时间,如果是,则将结果作为检查时间加24小时(第二天)。在我看来,日期和时间太多了,所以是否有一种方法可以通过将时间视为一条简单的线性线来进行计算?

所有时间都将在单个时区(含夏令时)中。注意:任意日期时间和检查时间都不会出现DST转换,即从01:0002:00,因此希望它们不会成为问题。

2 个答案:

答案 0 :(得分:1)

对于PHP,简短答案是不正确的(部分答案,我不是Carbon的专家,但是从快速的角度来看,它也不是,但是您可以通过以下代码创建宏)。

但是,在三元条件下,单行代码非常简单,恕我直言(如果要与当前日期和时间进行比较,请将第二个DateTime($str)替换为DateTime(),并更改{{1} },如果您希望第二天的比较时间完全相同,请>=

>

请注意:您给我们的不是时间戳,而是格式化的日期。

答案 1 :(得分:1)

这是我现在通过getCity = inputValue => { const {province} = this.state; // go get my city based on province, and filter by inputValue, if not null }; // ... <AsyncSelect loadOptions={this.getCity} /> 使用的内容,它似乎为我提供了正确的结果:

Carbon

时间的划分似乎很笨拙,但也许是最好的方法?方法是:

  • 创建一个带有我正在检查的时间戳的测试时间的时间戳。这将是我要查找的时间戳。
  • 如果我要检查的时间戳记在上一步中创建的时间戳记之后,请向其中添加一天。

我已经在DST上进行了测试,很高兴Carbon / Datetime在DST期间添加一天时保持相同的时间,一天将有25个小时或23个小时,具体取决于它走的路。 >

我仍然认为还有更多的“线性时间”方法可以做到这一点,但这似乎很简单且可靠。感谢我在办公室的@ michael-stokoe在此方面的领导。