根据文档,我很难弄清楚如何将Perl和MySQL之间的周数等同起来.
如何根据同一时区的unix时间戳计算Perl和MySQL中相同的周数?
SELECT DATE_FORMAT(from_unixtime(datefield), '%Y%U') FROM table;
Run Code Online (Sandbox Code Playgroud)
和
print strftime('%Y%U', localtime($datevar));
Run Code Online (Sandbox Code Playgroud)
应该为任何给定的时间戳生成相同的周数.理想情况下,我希望周数可以是便携式的,例如ISO 8601.虽然我的测试中的周数似乎有时匹配,但我在Perl和MySQL的文档中找不到任何确认日期格式明确遵循相同定义的内容.
谢谢!
对于 Perl,请查看DateTime模块。它提供了一个week()
方法,可以返回给定对象一年中的周数DateTime
:
($week_year, $week_number) = $dt->week;
Run Code Online (Sandbox Code Playgroud)
请注意,年份很重要,因为日期可以是上一年或下一年的一周内。这是因为“周”的 ISO 标准,其中一年的第一周是包含一月第四天的一周。因此,像 1 月 1 日这样的日期可能是上一年的最后一周。
对于未经训练的人来说,MySQL 的函数似乎YEARWEEK()
可以做同样的事情,或者像Mikey1980 所建议的那样,尝试一下该WEEKOFYEAR()
函数。它看起来YEARWEEK()
做同样的事情,正如它的文档所说:
结果中的年份可能与该年第一周和最后一周的日期参数中的年份不同。
...但我不能保证他们会做同样的事情。:-)