strtotime返回意外结果,相对时间戳

时间:2011-02-17 15:49:28

标签: php strtotime

我正在使用strtotime来获取一些相对时间戳,使用字符串描述向前或向后移动的时间,即“+1小时,15分钟”,“ - 2小时,45分钟”。

这非常有效:

$ds = strtotime('02/20/11 09:30:00 -1 hour');

但是,如果是“-1小时15分钟”,strtotime似乎减去小时,然后再加上15分钟。

我用逗号尝试了它:http://codepad.org/3dq7c2GM

我来到这里,看到一个previous question about this,并在没有逗号的情况下尝试了它:http://codepad.org/G8gm8E84

仍然没有运气。我尝试过使用相对参数:http://codepad.org/nwZ9ZqOv没什么。

我找到了自己的解决方案,这是非常不直观的,我不确定我是否遗漏了某些东西,或者甚至不正确地接近了这个问题。工作版最终成为:

$ds = strtotime('02/20/11 09:30:00 -1 hour -15 minutes');

http://codepad.org/O89S3mCj

我在这里遗漏了什么吗?在docs中没有提到这种行为。另外,有没有更好的方法来使用基于字符串的持续时间来获得这样的相对时间戳?

修改

编辑添加这些字符串的来源 - 它们来自用户界面,通过AJAX。有一些表单控件具有+/-按钮,以15分钟的间隔递增/递减显示字段中的持续时间。当它们发生变化时,AJAX请求会将这些值激发到服务器,通过strtotime转换为纪元时间戳,然后存储在数据库中。

3 个答案:

答案 0 :(得分:2)

之前我没有观察到这种行为,但也许是因为我总是将我的间隔转换为分钟。即,

$ds = strtotime('02/20/11 09:30:00 -75 minutes');

答案 1 :(得分:0)

您的时间来自哪里或之后在哪里使用?如果涉及到某些SQL,您可能可以使用MySQL Date操作。

答案 2 :(得分:0)

这很有意义 - 毕竟它是一名翻译。

<?php
$ds = strtotime('02/20/11 09:30:00 -1 hour, 15 minutes');
echo $ds."\n";
echo date('m/d/Y h:i:s a', $ds)."\n";
?>

一个人吸收1小时并增加15分钟的时间,所以如果15分钟变成负数(就像你做的那样,它会按照你的意愿去做)

我永远不会亲自使用strtotime - 我更喜欢使用epoch以来的秒数: - )