问题:
我们有一些产品使用“YYWW”( date('yW')
) 格式来标识创建日期。
有时我们甚至没有得到星期.. 我们所要处理的只是年份值。
我目前正在使用DateTime->setISODate()
从年份和周值中获取日期。
由于新年之交通常在日历周的中间,因此在考虑第一周时,我们的最短日期通常在前一年。
这本身并不是什么大问题,当尝试转换回原始日期代码字符串时,我会得到错误的年份值。
目标:
我们的目标是
- 将给定的 YYWW 值作为两个值存储到数据库中,它们的最早和最晚可能的日期。
- 然后,根据这些最小/最大日期,在需要查看时准确地重建原始年/周字符串。
示例: “代码”到“日期”:OK
- 代码“09”变为最小值 2008-12-29 / 最大值 2009-12-27
- 代码“0901”变为最小值 2008-12-29 / 最大值 2009-01-04
- 代码“0922”变为最小值 2009-05-25 / 最大值 2009-05-31
示例: “日期”到“代码”:失败
- 日期 2009-12-27 = "0952" ... 成功
- 日期 2009-05-31 = "0922" ... 成功
- 日期 2009-05-25 = "0922" ... 成功
- 日期 2009-01-04 = "0901" ... 成功
- 日期 2008-12-29 = "0801" ... 失败:预期为 "0901"
试过:
### Simplified for brevity ###
$dateOfMfg = '0901';
$dc = aCustomValidatorAndStuff($dateOfMfg); // returns array('year' => 2009, 'week' => 1)
$dateTimeMin = new DateTime();
$dateTimeMax = new DateTime();
$result = array(
'min' => $dateTimeMin->setISODate($dc['year'], $dc['week'], 1),
'max' => $dateTimeMax->setISODate($dc['year'], $dc['week'], 7),
);
echo '<pre>Result:<br />',var_dump($result),'</pre>';
echo 'Min: ',$result['min']->format('yW'),'<br />'; // "0801" ... Bad
echo 'Min: ',$result['max']->format('yW'),'<br />'; // "0901" ... Good
概括:
有没有一种本地方法可以为那个“最小”年获得适当的年份值?
想到了什么其他建议?