date('m/d/Y', strtotime('-1.5 years'))
返回,今天(2012 年 6 月 18 日)06/18/2017
,。
为什么会这样,有什么方法可以让 strtotime 处理小数年?它似乎正在将“-1.5”更改为“+5”。
编辑:所以你知道,这是在 PHP 5.1 上,所以更新的日期函数不可用。
您最好的解决方案可能是将其转换为几个月。所以1.5 years
变成18 months
了哪个会起作用。
已针对此问题打开错误报告https://bugs.php.net/bug.php?id=62353&edit=3 。
有一个名为 timelib 的库,其中包含所有时间函数。似乎将相对时间转换为时间戳存在问题。
以下是创建相对时间的函数:
static void timelib_set_relative(char **ptr, timelib_sll amount, int behavior, Scanner *s)
{
const timelib_relunit* relunit;
if (!(relunit = timelib_lookup_relunit(ptr))) {
return;
}
switch (relunit->unit) {
case TIMELIB_SECOND: s->time->relative.s += amount * relunit->multiplier; break;
case TIMELIB_MINUTE: s->time->relative.i += amount * relunit->multiplier; break;
case TIMELIB_HOUR: s->time->relative.h += amount * relunit->multiplier; break;
case TIMELIB_DAY: s->time->relative.d += amount * relunit->multiplier; break;
case TIMELIB_MONTH: s->time->relative.m += amount * relunit->multiplier; break;
case TIMELIB_YEAR: s->time->relative.y += amount * relunit->multiplier; break;
case TIMELIB_WEEKDAY:
TIMELIB_HAVE_WEEKDAY_RELATIVE();
TIMELIB_UNHAVE_TIME();
s->time->relative.d += (amount > 0 ? amount - 1 : amount) * 7;
s->time->relative.weekday = relunit->multiplier;
s->time->relative.weekday_behavior = behavior;
break;
case TIMELIB_SPECIAL:
TIMELIB_HAVE_SPECIAL_RELATIVE();
TIMELIB_UNHAVE_TIME();
s->time->relative.special.type = relunit->multiplier;
s->time->relative.special.amount = amount;
}
}
注意:此错误也会导致相同的问题:
echo strtotime("1.5 days ago");
变成-5天,-5小时,而不是期望的-1天和12小时(相对)。