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);
}
我有一个关于 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);
}