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