1

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

这完美地工作:

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

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

我用逗号试了一下:http: //codepad.org/3dq7c2GM

我来到这里,看到了一个关于这个的先前问题,并在没有逗号的情况下尝试了它:http: //codepad.org/G8gm8E84

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

我找到了自己的解决方案,这非常不直观,我不确定我是否遗漏了某些东西,或者甚至可能错误地处理了这个问题。工作版本最终是:

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

http://codepad.org/O89S3mCj

我在这里错过了什么吗?文档中没有提到这种行为。此外,是否有更好的方法来使用基于字符串的持续时间来获取此类相对时间戳?

编辑

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

4

3 回答 3

2

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

$ds = strtotime('02/20/11 09:30:00 -75 minutes');
于 2011-02-17T15:52:03.473 回答
0

你的时间是从哪里来的,或者你以后在哪里使用它?如果其中涉及一些 SQL,您也许可以使用 MySQL 日期操作。

于 2011-02-17T15:53:14.637 回答
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 - 我更喜欢从纪元开始使用秒数:-)

于 2011-02-17T15:54:49.943 回答