在 PST 中显示 unix 时间会显示一个额外的小时

Displaying unix time in PST shows an extra hour

所以我有一个非常基本的表单设置,一旦提交运行我就有了这个查询

$insert = "INSERT INTO data(name, time, time_end) 
VALUES ('".$name."', '".time()."', '".time()."' + 176400) ;";
mysqli_query($conn, $insert);

我在头文件中提到了这个以 PST 格式显示时间

date_default_timezone_set('America/Los_Angeles');
$time = time();

为了在 PST 中显示来自 'data' 的所有信息,我将此代码放在差异页面中

$session = "SELECT * from data";
$session_query = mysqli_query($conn, $session); ?>

<table>

  <tr>
    <th>Name</th>

    <th>Started at</th>
    <th>Ending at</th>
  </tr>

<?php

while($data = mysqli_fetch_assoc($session_query)) { ?>

 <tr>
    <th><?php echo $data['name']; ?></th>



    <th><?php

    $start = $data['time'];
    echo date("F j, Y, g:i a",$start); ?></th>

    <th><?php
    $end = $data['time_end'];
    echo date("F j, Y, g:i a",$end); ?></th>


  </tr>

  <?php

}
?>

</table>
<?php } ?>

这似乎只有在我添加以下或 48 小时后才能正常工作。 就像我在插入查询中添加 +172800 一样,它会显示

March 7, 3:30 am - March 9, 3:30 am

但是每当我尝试在插入查询中添加超过 48 小时(以秒为单位)时,它会不断添加一个额外的小时,就像我添加 72 小时一样

 March 7, 3: 30 am - March 10, 4:30 am

所以我不明白为什么显示 3 月 10 日,4:30 上午而不是 3:30 上午(额外一小时),谁能告诉我如何解决它。

这是由于夏令时。当日期不在 3 月 10 日或 11 日附近时,您是否仍然遇到问题?

简单的解决方案是使用 strtotime:

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

您的代码中似乎存在 sql 注入漏洞。你应该阅读这个:How can I prevent SQL injection in PHP?