单字符和双字符都被解释为时区(表“使用的符号”,行“tz”);六位数字被解释为HHMMII
(表“24 小时表示法”,行“小时、分钟和秒,无冒号”)。
有效格式
在第一种和第三种情况下,解析成功,strtotime
返回一个时间戳并date
打印它对应的任何日期。第一种情况成功的原因很明显;对于第三种情况,请记住军事时区可以用一个字母表示,然后结果才有意义。让我们按照以下代码:
$zones = range('a', 'z');
$last = null;
foreach($zones as $tz) {
$ts = strtotime($tz);
if ($last !== null) {
echo "TZ $last[0] => TZ $tz: change = ".($ts - $last[1])."\n";
}
$last = array($tz, $ts);
}
这打印
TZ a => TZ b: change = -3600
TZ b => TZ c: change = -3600
TZ c => TZ d: change = -3600
TZ d => TZ e: change = -3600
TZ e => TZ f: change = -3600
TZ f => TZ g: change = -3600
TZ g => TZ h: change = -3600
TZ h => TZ i: change = -3600
TZ i => TZ j: change = -1346649725
TZ j => TZ k: change = 1346646125
TZ k => TZ l: change = -3600
TZ l => TZ m: change = -3600
TZ m => TZ n: change = 46800
TZ n => TZ o: change = 3600
TZ o => TZ p: change = 3600
TZ p => TZ q: change = 3600
TZ q => TZ r: change = 3600
TZ r => TZ s: change = 3600
TZ s => TZ t: change = 3600
TZ t => TZ u: change = 3600
TZ u => TZ v: change = 3600
TZ v => TZ w: change = 3600
TZ w => TZ x: change = 3600
TZ x => TZ y: change = 3600
TZ y => TZ z: change = -43200
你可以看到我们从一个时区到下一个时区的连续性;不存在时区的不连续性'j'
(此处解析失败,结果相同,如下所述);'n'
我们从 UTC+12 移动到 UTC-1 等时区的不连续性。
无效格式
在第 2 和第 4 种情况下,解析失败,strtotime
返回false
,这与您调用的效果相同date("d-m-Y", 0)
——它格式化了时代的开始(1970 年 1 月 1 日,00:00:00)。发生这种情况是因为按照正常类型杂耍规则false
转换为整数。0
strtotime('x')
真正返回的是什么?
它返回 UTC-11 时区的当前时间(这是“x 射线”军事时区)。根据您的本地时间和时区,从您的角度来看,这通常是“今天”或“明天”。如果您恰好低于 UTC-11,那么它甚至可能是“昨天”(尽管这不太可能)。