确定一周是奇数还是偶数

Kev*_*vin 3 php datetime

我已经调试了这个遗留代码,并希望对其进行健全性检查.

其目的是允许某人选择运送产品的交货频率.如果有人想要他们的产品每隔一周,系统需要确定他们是否应该在下周或两周后获得订单.我们称之为一周或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;
    }
Run Code Online (Sandbox Code Playgroud)

此代码未被注释或记录.令我困惑的部分是:

  1. 为什么4从朱利安减去,然后除以7?
  2. 如果今天是星期一,$ julian_week是2129,并且2129%2评估为TRUE.那是对的吗?
  3. 这甚至是应该怎么做的?我不能用日期('w')重写这个更容易吗?

Bob*_*ley 7

是的,使用日期会更容易,而且考虑到闰年,夏令时,所有额外的东西,你不想要处理.

if (date('W')%2==1)
Run Code Online (Sandbox Code Playgroud)

这比上面的SOOOO更容易维护.


Bre*_*sel 5

我不相信在这种情况下你可以使用 date("W") 。根据 ISO 计算,有时会有 53 周的年份。在这些年中,第 53 周之后是第 01 周,均为奇数,并且基于偶数/奇数 ISO 周数的 A/B 计算将导致两个连续的 A 或 B 周。

原始计算确定从当前星期一或最近星期一(如果今天不是星期一)的 UNIX 纪元算起的天数。这-4会导致 A/B 周标签在星期四发生变化。一周的奇数/偶数是根据固定日期(Unix Epoch)确定的,因此使用原始代码的 A/B 数的振荡不会出现不连续性。