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

PHP, repeating events check next one with unix timestamps

我有一个关于 php 的问题,我真的不知道如何解决。我有一个数组,其中包含来自 mysql 查询的 unix 时间戳。

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

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

例如:

在数组中我有:

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

1595116800 --> 2020/07/19(星期日)

今天我们在 1595376000(星期三),所以它应该 return 1595116800 + 604800(星期日)。

5 天后(下周一)应该 return 1595289600 + 604800 = 1595721600(第一个星期二 + 一周)

一周后(下周三),应该return下周日(2020/08/02):1596326400

等等...

谢谢!

对于您拥有的每个时间戳 - 计算下一个时间戳(添加一周),直到它在当前时间戳之后。然后 return 最低,因为那个将是最接近现在(但也是未来)的。

假设现在是 2020-07-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 timestamp
function nextOccurence(array $timestamps, $time = null) { 
  $now = $time ?? time();

  $nextTimestamps = [];
  foreach ($timestamps as $timestamp) {
    while ($timestamp < $now) {
      $timestamp += 604800;
    }

    $nextTimestamps[] = $timestamp;
  }

  return min($nextTimestamps);
}