为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
墨色风雨 2023-08-19 14:29:12
有一个 php 问题,我真的不知道如何解决。我有一个充满来自 mysql 查询的 unix 时间戳的数组。这些时间戳是每周重复的事件(例如,每周二和周四)。他们可以重复几天或只重复一天。知道重复的日子,下一天将是哪一天。例如:在数组中我有:1595289600 --> 2020/07/21(星期二)1595116800 --> 2020/07/19(周日)今天我们的地址是 1595376000(星期三),所以它应该返回 1595116800 + 604800(星期日)。5 天后(下周一)应该返回 1595289600 + 604800 = 1595721600 (第一个周二 + 一周)一周后(下周三),它应该在下周日返回(2020/08/02):1596326400等等...谢谢你!
查看完整描述

1 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

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


假设今天是 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 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);

}


查看完整回答
反对 回复 2023-08-19
  • 1 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号