首页 > 解决方案 > 如何使用 strotime 更新 mysql unix 时间戳

问题描述

date_default_timezone_set('America/Los_Angeles'); 
$insert = "INSERT INTO sql(name, time, time_end) VALUES ('".$name."', '". strtotime('now')."', '". strtotime('+2 days')."') ;";
    mysqli_query($conn, $insert);

插入查询以处理表单中的数据,并在 PST 中显示时间

dispay.php

name             started at                    ending at 

test            March 7, 2019, 3:41 pm        March 10, 2019, 3:41 pm

stack           March 8, 2019, 6:53 am        March 9, 2019, 6:53 pm 

所以我在表单中选择了单选按钮来选择要添加的持续时间,然后提交.. 添加了 72 小时进行测试和 24 小时进行堆叠

如果我必须更新time_end,我不知道如何在更新查询中准确使用strtotime,所以我尝试使用这个查询直接向它添加秒数

$update = "UPDATE table SET
    time_end = time_end + 252900
    where name = 'test' ;";
    mysqli_query($conn, $update);

然后会显示

dispay.php

name             started at                    ending at 

test            March 7, 2019, 3:41 pm        March 13, 2019, 4:41 pm

stack           March 8, 2019, 6:53 am        March 9, 2019, 6:53 pm 

问题是当我以这种方式使用更新查询而不是使用插入查询时,它增加了一个额外的小时。请告诉我如何解决这个问题

标签: phpmysqlunix

解决方案


时间可以在连续的几秒钟内几乎完美地计算出来。即 1,2,3,4 秒过去了,依此类推。
这正是 Unix 时间戳。它是自特定时间点(即 UNIX 纪元)以来经过的秒数。因为这是经过的秒数,所以可以表示为整数。
然而,我们的日历和时钟并不是在一条直线上连续计算时间。时间和日期是非常复杂和相对的概念。前一刻可能是凌晨 1.59 点,而下一秒可能是凌晨 3 点。在那之后的另外六个月,你在同一小时内重温了两次。
在 PHP 中的示例说明了这一点

在您的示例中,您在时钟上跳过了一个小时,但您的秒数并没有考虑到这种差异。一种简单的方法如下:

$start = 1552211999;
$dt = new DateTime('@'.$start);
$dt->setTimezone(new DateTimeZone('America/Los_Angeles'));
$dt->modify('+1 day');

在 Ideone 在线试用


推荐阅读