date('m/d/Y', strtotime('-1.5 years'))
返回,今天(2012年6月18日),06/18/2017
。
为什么会这样,有没有办法让strtotime处理分数年?它似乎正在将“-1.5”改为“+5”。
编辑:所以你知道,这是在PHP 5.1上,因此新的日期函数不可用。
答案 0 :(得分:4)
您最好的解决方案可能是将其转换为数月。因此1.5 years
变为18 months
,这将有效。
答案 1 :(得分:2)
已针对此问题打开错误报告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小时(相对)。