gpt4 book ai didi

php - 为什么 strtotime ('x' ) 返回明天的日期

转载 作者:可可西里 更新时间:2023-11-01 12:33:44 25 4
gpt4 key购买 nike

我无法理解 - 为什么会出现以下情况?

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

这些值来 self 正在做的一些测试,以尝试找出特定函数返回某些值的方式/原因。

它导致我的函数失败 - 因为您会假设“a”(或任何单个字符)作为错误的不正确日期返回。

最佳答案

单字符和双字符都被解释为 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' 的不连续性(此处解析失败,结果相同,如下所述);我们从 UTC+12 移动到 UTC-1 等时区 'n' 的不连续性。

格式无效

在第 2 和第 4 种情况下解析失败,strtotime 返回 false,这与调用 date("d-m-Y", 0 ) -- 它格式化纪元的开始(1970 年 1 月 1 日,00:00:00)。发生这种情况是因为 false 按照正常 type juggling rules 转换为整数 0 .

strtotime('x') 真正返回什么?

它返回 UTC-11 时区的当前时间(这是“X 射线”军事时区)。根据您本地的时间和时区,从您的角度来看,这通常是“今天”或“明天”。如果您的时间恰好小于 UTC-11,那么它甚至可能是“昨天”(尽管是 that's not quite likely )。

关于php - 为什么 strtotime ('x' ) 返回明天的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12248380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com