【问题标题】:PHP Get 1st weekdayPHP 获取第一个工作日
【发布时间】:2011-02-16 19:04:33
【问题描述】:

我试图从指定日期找到第一个工作日,但我还没有找到任何解决方案,但我在想,你可以做类似 strtotime("-x days", $time)

刚才我正在用这个方法来计算返回多少天,但是我想知道,这是否可以通过任何方式进行优化

if ($i == 0)
   return 6;
else
   return $i-1;

其中 $i 是星期几的数字表示(与 PHP 的 date('w') 相同)

我还需要找到一周的最后一天,但我认为,你可以做到

strtotime('+'.date('w', $dateTo).'days', $dateTo);

【问题讨论】:

  • 第一个工作日是什么意思?
  • 为了澄清,这是一个有效的用例吗?您输入 2 月 20 日(星期日),它会返回 21 日(星期一)。如果您输入 2 月 16 日(星期三),则返回 2 月 16 日。
  • $jnpcl 一周的第一个星期一。
  • @Jonah 如果您输入 2 月 20 日,它应该返回 2 月 14 日。如果您输入 2 月 16 日,它也应该返回 2 月 14 日
  • @The87Boy:但这破坏了一致性。您将在第一周返回一周。

标签: php math date


【解决方案1】:

这都是相对日期数学。如果你有一个正确的 PHP 时间戳,那么它只是一个简单的整数。 date('w') 是从该时间戳中提取星期几值的正确方法,但其余的可以通过常规数学来完成:

$today = date('w', $dateTo);
$last_sunday = $dateTo - (86400 * $today); // same time on previous sunday
$last_day_of_week = $dateTo + (86400 * (6 % $today));

这比 round-tripping 快到 strtotime() 并导致日期字符串解析惩罚。

【讨论】:

  • 如果它比往返通过strtotime() 更快,那么我仍然需要按照前面提到的那样进行数学运算,因为一周从丹麦的星期一开始
  • 好吧,'w' 返回一个基于 0/星期日的星期。 'N' 返回 1/星期一。
  • 哦,我没有看到'N',当我查看列表时:o 但是我可以看到,我只能使用'Z',因为我的主机只使用 PHP 5.0跨度>
【解决方案2】:

尝试使用strtotime() 和relative format。像这样的东西应该工作: 第一个工作日strtotime('monday', $relativeTime);,最后一个工作日strtotime('friday', $relativeTime);。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多