猿问

PHP,重复事件使用 unix 时间戳检查下一个事件

有一个 php 问题,我真的不知道如何解决。我有一个充满来自 mysql 查询的 unix 时间戳的数组。

这些时间戳是每周重复的事件(例如,每周二和周四)。他们可以重复几天或只重复一天。

知道重复的日子,下一天将是哪一天。

例如:

在数组中我有:

1595289600 --> 2020/07/21(星期二)

1595116800 --> 2020/07/19(周日)

今天我们的地址是 1595376000(星期三),所以它应该返回 1595116800 + 604800(星期日)。

5 天后(下周一)应该返回 1595289600 + 604800 = 1595721600 (第一个周二 + 一周)

一周后(下周三),它应该在下周日返回(2020/08/02):1596326400

等等...

谢谢你!


墨色风雨
浏览 87回答 1
1回答

开心每一天1111

对于您拥有的每个时间戳 - 计算下一个时间戳(添加一周),直到它在当前时间戳之后。然后从那些中返回最低的,因为那个将是最接近现在(但也是将来)的。假设今天是 2020 年 7 月 22 日星期三。你的 2020-07-21 星期二已经过去了,所以添加一周:2020-07-28 星期二 - 它是未来的,所以它是我们的候选者。你的 2020-07-19 星期日也已经过去了,所以添加一周:2020-07-26 星期日 - 它是未来的,所以它是第二个候选者。现在从 2 个候选者中选择较低的:2020-07-26 星期日。如果日期过去的时间较长,那么您将需要每周更多次。像这样的东西:<?php// those are your timestamps: $timestamps = [1595289600, 1595116800];// $time is optional int for when you want to perform the calculation. defaults to current timestampfunction nextOccurence(array $timestamps, $time = null) {&nbsp;&nbsp; $now = $time ?? time();&nbsp; $nextTimestamps = [];&nbsp; foreach ($timestamps as $timestamp) {&nbsp; &nbsp; while ($timestamp < $now) {&nbsp; &nbsp; &nbsp; $timestamp += 604800;&nbsp; &nbsp; }&nbsp; &nbsp; $nextTimestamps[] = $timestamp;&nbsp; }&nbsp; return min($nextTimestamps);}
随时随地看视频慕课网APP
我要回答