我正在使用基于时间的令牌作为种子年份和周数,例如:
$token = md5($salt + gmdate('YW'));
昨天星期天,令牌被破坏,服务器和客户端的时间被同步(按时)。
使用php的交互式cli工具检查,我意识到PHP返回的周数是“01”(零一)。
例如:
Interactive mode enabled
php > echo gmdate('W');
01php > echo date('W');
01php >
在这篇文章发布时,它是在世界协调时间21:58(晚上9点58分)的29分钟,这是从昨天00:00 UTC开始打破的。
在php 5.5.9上测试
答案 0 :(得分:1)
使用Y
代替格式字符o
,这将返回ISO-8601年份编号。
它具有与Y相同的值,除了如果ISO周数(W)属于上一年或下一年,则使用该年代。 (在PHP 5.1.0中添加)
示例:
echo gmdate('oW');
答案 1 :(得分:0)
可能由于不同的时区或区域设置。在某些国家/标准星期日被视为一周的第一天。
WEEK(日期[模式]);
日期=日期值。 mode =表示开始的整数 星期。
默认的arugment是0,这是星期日,将此设置为1将是 星期一,星期二,等等。
周(日期,1);
引自How do I set first day of the week to Monday when using Week(Date) in PHP/MySQL?
答案 2 :(得分:0)
我发现了问题。
在ISO-8601标准中,本周是2015年的01,而不是2014年的最后一周。可以检查here:
问题是,我在客户端使用函数返回2015和1(而我从PHP使用2014和01“201401”!==“20151”)。