我已经调试了这个遗留代码,并希望对其进行健全性检查。
它的目的是允许某人选择运送产品的交货频率。如果有人想要他们的产品每隔一周,系统需要确定他们是否应该在下周或两周后获得订单。我们称之为一周或B周。
请记住,我没有写这篇文章,我只是想弄清楚它,并希望得到一些评估其准确性的帮助:
if (date("l") == "Monday" ) {
$start = 0;
} else if (date("l") == "Tuesday" || date("l") == "Wednesday" || date("l") == "Thursday" || date("l") == "Friday" || date("l") == "Saturday"|| date("l") == "Sunday") {
$start = -1;
}
// if changing to every other week set to next week's a/b-ness
$a_week_tid = 34;
$b_week_tid = 35;
$every_other_week_frequency_id = 32;
if ($delivery_frequency == $every_other_week_frequency_id) {
$julian = (int) (strtotime('Monday +' . $start . ' week') / 86400);
$julian_week = ($julian-4) / 7;
if ($julian_week % 2) {
$today_a_or_b = $b_week_tid;
$next_week_a_or_b = $a_week_tid;
$a_or_b_week_string = '(A Week)';
} else {
$today_a_or_b = $a_week_tid;
$next_week_a_or_b = $b_week_tid;
$a_or_b_week_string = '(B Week)';
}
} else {
$next_week_a_or_b = NULL;
$a_or_b_week_string = NULL;
}
此代码未被注释或记录。令我困惑的部分是:
答案 0 :(得分:7)
是的,使用日期会更容易,而且考虑到闰年,夏令时,所有额外的东西,你不想要处理。
if (date('W')%2==1)
这比以上更容易维护。
答案 1 :(得分:3)
在这种情况下,我不相信你可以使用日期(“W”)。根据ISO计算,有时会有53周的年份。在那些年,第53周之后是第01周,两个奇数,并且基于偶数/奇数ISO周数的A / B计算将导致连续两周A或B周。
原始计算确定当前星期一的UNIX时期或最近星期一(如果今天不是星期一)的天数。 -4
导致A / B周标签在星期四更改。一周的偶数/奇数是从固定日期(Unix Epoch)确定的,因此使用原始代码在A / B-ness的振荡中不会出现不连续性。
答案 2 :(得分:1)
一年中第一周的ISO标准是,这是一年中第一个星期四下降的那一周。这就是从朱利安日期中减去4的原因。然后通过除以7找到周数。
ISO标准再次暗示周数不能超过53.我不明白你的2129数字是如何产生的。但是,div运算符不会为此数字评估TRUE。在周数上检查div运算符是确定您是在a周还是b周的方式。如果是在星期四之前,这个数字很可能比你预期的少1。
编码看起来对我来说相当不错,尽管我还没有完成所有这些工作。看起来确实如此。
答案 3 :(得分:1)
在连续星期五使用W,mod由2.两行输出1.这样做有时会失败。
echo date('W',strtotime('2016-01-01'))%2;
echo date('W',strtotime('2016-01-08'))%2;
答案 4 :(得分:0)
只是一个简单的方法。
<?php
$weekNumber = date("W");
echo 'Week number:',$weekNumber;
if($weekNumber&1) {
echo '<strong>Week A.</strong>';
} else {
echo '<strong>Week B.</strong>';
}
?>
答案 5 :(得分:0)
$day = '2019-11-10';
$date = new DateTime($day);
$dayOfMonth = $date->format("j"); // month days 1 - 30
$weekNumber = ceil($dayOfMonth / 7); // get the week number
if ($weekNumber % 2 == 0) { //if week number is even
echo "Even Week";
} else {
echo "Odd Week";
}
**// output Even Week**