使用 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 周,周数与一周中的特定日期对齐