【问题标题】:How to get correct week for 2017-01-01?如何获得 2017-01-01 的正确星期?
【发布时间】:2017-05-17 08:07:37
【问题描述】:

我的代码中有开始和结束日期选择器选项。任何用户都可以选择开始和结束周来获取每周数据。

我想获得周数和年份但是如果我选择 2017-01-01 作为开始日期并选择 2017-02-25 作为结束日期,它将显示第 52 周和 2017 年作为从 1 月 2 日开始的一周。有没有办法得到正确的星期和年份?

$start     = new DateTime($event->data['requestData']['input_from']); //it takes start date
$end       = new DateTime($event->data['requestData']['input_to']); //it takes end date
$interval   = new DateInterval('P1W');
$period   = new DatePeriod($start, $interval, $end);
foreach ($period as $dt) {
$newItems[$dt->format('Y.W')] = array('year' => $dt->format('Y'), 'week'=> $dt->format('W'));
}

输出:

Array
(
    [2017.52] => Array
        (
            [year] => 2017
            [week] => 52
        )

    [2017.01] => Array
        (
            [year] => 2017
            [week] => 01
        )

    [2017.02] => Array
        (
            [year] => 2017
            [week] => 02
        )

    [2017.03] => Array
        (
            [year] => 2017
            [week] => 03
        )

    [2017.04] => Array
        (
            [year] => 2017
            [week] => 04
        )

    [2017.05] => Array
        (
            [year] => 2017
            [week] => 05
        )

    [2017.06] => Array
        (
            [year] => 2017
            [week] => 06
        )

    [2017.07] => Array
        (
            [year] => 2017
            [week] => 07
        )

)

【问题讨论】:

    标签: php date cakephp datepicker


    【解决方案1】:

    您应该阅读first week 的定义。 根据定义,1 月 1 日不是第 1 周。周编号从星期一开始,所以如果 1 月 1 日是星期日,就像 2017 年的情况一样,从技术上讲,它是在前一年的第 52 周(即使它在自己的年份)。

    因此,您的代码在技术上为您提供了正确的结果:2017 年 1 月 1 日是 2017 年,但也是第 52 周(2016 年)。

    【讨论】:

    • 我知道代码在技术上给了我正确的结果,但没有任何方法可以达到要求吗??
    【解决方案2】:

    我已经解决了这个问题。在格式中使用 “o” 说明符来显示 “ISO-8601 年份编号” 而不是当前年份。将 $dt->format('Y.W') 更改为 $dt->format('o.W') 如下

      foreach ($period as $dt) {
            $newItems[$dt->format('o.W')] = array('year' => $dt->format('o'), 'week'=> $dt->format('W'));
            }
    

    输出:

    Array
    (
        [2016.52] => Array
            (
                [year] => 2016
                [week] => 52
            )
    
        [2017.01] => Array
            (
                [year] => 2017
                [week] => 01
            )
    
        [2017.02] => Array
            (
                [year] => 2017
                [week] => 02
            )
    
        [2017.03] => Array
            (
                [year] => 2017
                [week] => 03
            )
    
        [2017.04] => Array
            (
                [year] => 2017
                [week] => 04
            )
    
        [2017.05] => Array
            (
                [year] => 2017
                [week] => 05
            )
    
        [2017.06] => Array
            (
                [year] => 2017
                [week] => 06
            )
    
        [2017.07] => Array
            (
                [year] => 2017
                [week] => 07
            )
    
    )
    

    【讨论】:

      猜你喜欢
      • 2011-10-07
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 2020-05-12
      相关资源
      最近更新 更多