【发布时间】:2019-11-13 13:48:49
【问题描述】:
在电视行业,他们使用广播日历,它与公历的不同之处在于将上个月的日期拉入以创建当前月份。每个月正好有 4 或 5 周,而这一周总是从星期一开始。
这里有关于这个日历的更多信息: https://en.wikipedia.org/wiki/Broadcast_calendar
Updated Broadcast Calendar example
我正在努力实现三件事:
1) 一个 PHP 函数,我可以在其中输入特定日期并让它返回广播 month 它是什么。
function getBroadcastMonth('2019-10-16'){
//Return broadcast month
return 10;
}
2) 一个 PHP 函数,我可以在其中输入特定日期并让它返回广播 week 它是什么。
function getBroadcastWeek('2019-10-16'){
//Return broadcast week
return 42;
}
3) 我可以获取广播月的第一天和最后一天的功能。
function getFirstAndLast(10){
//Return first and last day of the given broadcast month
return array('first_day' => '2019-09-30', 'end' => '2019-10-27');
}
我尝试构建一个函数以至少在一个数组中构建一个日历,因此我可以以某种方式使用它来获得我需要的结果,但是我并没有走得太远。这是代码。
$now = new DateTime();
$from = (new DateTime)->setISODate($now->format('Y') - 1, 1);
$from->modify("monday this week"); // see ISO 8601
while($from < $now) {
echo $from->format('W -- d/M/Y').'<br />';
$from->modify("+1 week");
}
有人能帮我解决这个问题吗?
There is a further example here of how this can be done in SQL Server.
【问题讨论】:
-
我认为最简单的开始方法是编写一些测试来具体说明此功能的确切要求。例如,2019 年 1 月 7 日应该是第 2 周? (或者它是从零开始的索引,所以第 1 周?)而且,您打算如何处理 DST?
-
我很困惑。根据维基百科的文章,3 月 1 日应该是 3 月的第一周,但在您的图像中是 2 月的最后一周。
-
你说得对,尼克,我认为日历生成不正确。如果您查看来自官方来源的消息,则第一次出现在 3 月份。 rab.com/public/reports/broadcastCalendar.cfm。我将更新示例。
-
我认为它不需要从零开始。我见过的大多数都会从 1 开始。我不确定你所说的 DST 是什么意思。我认为这不会影响它吗?
-
@zamtime 通过在他们的名字前加上
@将您的 cmets 发给特定的人(正如我在此评论中所做的那样)。只要你输入@,你就会得到一个要使用的名字列表。