使用 PHP 从日期(月)确定周数

Posted

技术标签:

【中文标题】使用 PHP 从日期(月)确定周数【英文标题】:Determine Week number from a date(Month) using PHP 【发布时间】:2016-09-19 06:52:11 【问题描述】:

我需要帮助来确定一周中的特定日期是否属于该月的第 1 周、第 2 周第 3 周或第 5 周。下面的代码从星期一到星期六返回 0-7,但这不是我想要的,而是我希望能够确定例如今天是 19/09/2016,它属于本月的第 3 周。我需要这方面的帮助。

function getWeekday($date)
return date('w',strtotime($date));

【问题讨论】:

【参考方案1】:

你只需要

ceil(date('d')/7);

所以你的函数看起来像

function getWeekday($date)
  return ceil(date('d',strtotime($date))/7);

Demo

尽管要求有点奇怪。 一个月中的一周 不是一个明确定义的事情,但根据您的 cmets 的各种答案,如果日期在该月的第 7 天之内,您只需要查看第 1 周。接下来 7 个 2 个,接下来 7 个 3 个,接下来 7 个 4 个,剩菜 5 个。

输出

D   W
1   1
2   1
3   1
4   1
5   1
6   1
7   1
8   2
9   2
10  2
11  2
12  2
13  2
14  2
15  3
16  3
17  3
18  3
19  3
20  3
21  3
22  4
23  4
24  4
25  4
26  4
27  4
28  4
29  5
30  5
31  5

旧答案

简单!你需要一个大写的W,而不是小写的。

W

ISO-8601 一年中的周数,从星期一开始的周数(在 php 4.1.0 中添加)

return date('W',strtotime($date));

您正在使用的小写字母是

星期几的数字表示

Manual

【讨论】:

谢谢,但这不是我想要的。您的回复将给我第 38 周,而不是第 3 周。我想要的是花一个月的时间,并确定那一天是否只属于该月的第 1 周或第 2 周或第 3 周或第 4 周或第 5 周。 每月一周的起点是哪一个?第 1 天? 第一天还是第一次约会?这就是问题所在。一周什么时候开始,可以从星期二、星期三等开始吗? 第一个日期,即每个月的第一天 @Hankey,这个答案解决了我的问题。谢谢大家【参考方案2】:

这对于 DateTime 对象或者更确切地说是 DateTimeImmutable 来说非常简单。

// Immutable so we don't need to clone the object.
$date = new DateTimeImmutable ($date, $dtz);

// We need to find out which week number the month starts at.
$start = $date->modify ("first day of this month");

// The first week - the current week + 1 == The week in the month.
$monthWeek = $date->format ("W") - $start->format ("W") + 1;

仅此而已。

【讨论】:

请问$dtz是什么变量? 那是 DateTimeZone 对象。有关详细信息,请参阅 DateTime 手册。 php.net/manual/en/class.datetime.php 它抛出的错误为 1。未定义的变量:dtz。 2 致命错误:调用非object.3 上的成员函数format()。未定义的$日期。请问我在你的代码中做错了什么? 您需要使用正确的时区信息定义 $dtz 变量。根据手册。顺便说一句,这是您要开始的 DateTime 类的 __construct() 方法。 php.net/manual/en/datetime.construct.php 另外,刚刚注意到我在第二行中使用了错误的方法。刚刚从format()改成了modify(),抱歉。【参考方案3】:

这应该可行:

 echo date('W', strtotime($date)) - date('W', strtotime("first day of this month")) + 1;

【讨论】:

让我回去试试 恐怕这不是一个好方法。不仅因为您使用旧函数进行日期操作,还因为这增加了许多不必要的复杂性和手动计算。请参阅我的答案以获得更清洁、更简单的方法。 @ChristianF 这样更好吗? echo date('W', strtotime($date)) - date('W', strtotime("本月第一天")) + 1; 让我们continue this discussion in chat。

以上是关于使用 PHP 从日期(月)确定周数的主要内容,如果未能解决你的问题,请参考以下文章

Teradata SQL 周数 - 从 1 月 1 日开始的第 1 周,周数与一周中的特定日期对齐

2019 年 4 月 6 日之后从 Location.getTime 返回的日期错误(周数翻转)

Python从特定日期提取周数

Elixir/Phoenix 日期从工作日 + 周数

动态计算截至该日期的财政年度结束和周数

Excel确定现有日期的上一个月和年