我无法理解这一点 - 为什么会发生以下情况?
echo date("d-m-Y", strtotime($str));
$str = '214454'; // Produces todays date
$str = '333333'; // Produces 1-1-1970
$str = 'a' (or ANY single char) // Produces tomorrows date
$str = 'aa' (or ANY double char) // Produces 1-1-1970
或者只是返回strtotime函数
echo strtotime($str);
$str = '214454'; // Produces todays date
$str = '333333'; // returns false
$str = 'a' (or ANY single char) // Produces tomorrows date
$str = 'aa' (or ANY double char) // returns false
这些值来自我正在进行的一些测试,试图找出如何/为什么从特定函数返回某些值。
它导致我的函数失败 - 因为你会假设“a”(或任何一个char)作为错误的错误日期返回。
答案 0 :(得分:7)
单个和双字符都被解释为timezones(表“使用符号”,行“tz”);六位数字被解释为HHMMII
(表格“24小时表示法”,行“小时,分钟和秒,没有冒号”)。
在解析成功的第一和第三种情况下,strtotime
返回一个时间戳,date
打印它对应的任何日期。第一种情况成功的原因显而易见;对于第三种情况,请记住military time zones可以用一个字母引用,然后结果是有意义的。让我们关注this code:
$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)
的效果相同 - 它格式化了纪元的开始(1月) 1970年1月,00:00:00)。发生这种情况是因为false
按照正常type juggling rules转换为整数0
。
strtotime('x')
真正返回了什么?它返回UTC-11时区的当前时间(这是“X射线”军事时区)。根据您当地的时间和时区,从您的角度来看,这通常是“今天”或“明天”。如果你碰巧低于UTC-11那么它甚至可能是“昨天”(尽管that's not quite likely)。
答案 1 :(得分:3)