比给定日期时间早一小时


One Hour Earlier Than Given Datetime

我这里有个问题。。

假设我有这样的约会时间。


$date = strtotime($date);

我需要将其转换为Unix时间戳格式,但要提前一小时。。我试过


$date = strtotime($date-86400)

,但在我看来这是错误的。当我偷偷溜进桌子时,结果是0。

实现这一目标的适当方式是什么?

谢谢。

strtotime将为您提供日期的unix时间戳。从这个时间戳中,您可以减去您的小时数:

$date = strtotime($date) - 3600; // 3600 = 60 * 60

如果调用strtotime($date - 3600),就像获取-3600(例如strtotime(-3600))的时间一样,这毫无意义,因为strtotime需要一个字符串作为第一个参数。

你可以做:


$testDateStr = strtotime($date);
$finalDate = date("Y-m-d H:i:s", strtotime("-1 hour", $testDateStr));

希望它能帮助

86400秒是一天,而不是一小时。

strtotime()的输出是一个unix时间戳。3600秒之前的时间戳减去一小时。因此:

$date = strtotime($somestring);
$hourago = $date - 3600;

或者,根据$somestring的原始格式:

$hourago = strtotime($somestring . " - 1 hour");

不要忘记date_default_timezone_set()

还没有人提供DateTime对象解决方案,所以我会的。它是处理日期时间的最现代的方法,不需要计算任何分钟&秒。

我总是喜欢加入一些时区声明,让事情变得明确。夏令时通常是日期时间操作的一个问题,但在这种情况下可能还可以。请随意修改您的案件的时区。

PHP手册链接:

  • DateTime对象
  • 日期时间修改()
  • 日期时间getTimestamp()
  • DateTime格式()
  • 时区列表

代码(包括用于比较的格式化时间)演示链接:

$now=new DateTime('NOW UTC');
$now_stamp=$now->getTimestamp();
$formatted_now=$now->format("Y-m-d H:i:s");
echo "$now_stamp ($formatted_now)'n";
$hour_ago=$now->modify('-1 hour');
$hour_ago_stamp=$hour_ago->getTimestamp();
$formatted_hour_ago=$hour_ago->format("Y-m-d H:i:s");
echo "$hour_ago_stamp ($formatted_hour_ago)";

输出:

1492687193 (2017-04-20 11:19:53)
1492683593 (2017-04-20 10:19:53)

尝试此查询

$query= "insert into yourTable(otherValues, date) 
values (otherFields, DATE_ADD(NOW(),INTERVAL -1 hour))

使用DATE_ADD插入比当前时间短1小时的日期值。

在我看来,这是更好的方式:

// It's better to set your time location, for example, in Iran.
date_default_timezone_set("Asia/Tehran");
$datetime = new DateTime(date());
// Subtract one hour
$interval = new DateInterval("PT1H");
$datetime->sub($interval);
// Format and echo the updated datetime
echo $datetime->format("H:i:s");