带周数格式的strftime {YYYY} W {WW}给出了错误的一周

时间:2015-10-09 13:48:07

标签: php

我正在尝试使用strftime转换{YYYY} W {WW}字符串,如this answer所述。

然而它总是给出W-1:

echo $date = utf8_encode(strftime('%B %Y, week %W', strtotime('2015W38')));
// this will echo "September 2015, week 37"
// but should echo "September 2015, week 38"

我该如何正确纠正这个问题?

PHP版本:5.6.9

3 个答案:

答案 0 :(得分:2)

strtotime

  

ISO年与ISO周YY" - "? " W" W" 2008W27"," 2008-W28"

strftime

  

%W一年中一周的数字表示,以。开头   第一个星期一是第46周(今年第46周)   从周一开始)

     

%V ISO-8601:1988年给定年份的周数,从   一年中的第一周至少有4个工作日,星期一是   第01周到第53周的开始(其中53表示重叠   周)

所以你应该使用

echo $date = utf8_encode(strftime('%B %Y, week %V', strtotime('2015W38')));

Desclaimer:我不熟悉php,所以请确认我的想法。

编辑>

正如@syck补充道:ISO 8601从01开始计算周数,第一周是第一周的第一周(见here)。

答案 1 :(得分:2)

这可以按预期工作:

$year = "2015"; // Year 2015
$week = "38"; // Week 38
$date1 = date( "F Y, W", strtotime($year."W".$week) );
echo $date1;
//September 2015, 38

答案 2 :(得分:1)

您必须将%W替换为%V