【问题标题】:Displaying unix time in PST shows an extra hour在 PST 中显示 unix 时间会显示一个额外的小时
【发布时间】:2019-03-08 13:09:56
【问题描述】:

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

$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 中显示来自“数据”的所有信息,我将这段代码放在差异页面中

$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(如额外一小时),有人可以告诉我如何解决它。

【问题讨论】:

  • 您知道添加“172800”并不是很准确。我建议改用“+ 2 天”。增加秒数时,夏令时等可能会搞砸
  • 您的问题中没有我们可以帮助您的代码。添加一个我们可以使用的示例
  • 但是我在mysql中将time和time_end设置为INT类型,如果我使用“+2天”就不行了?
  • 这就是 strtotime 的用途。
  • 那么我该如何将这些数据类型更改为(从 int)+2 天才能工作?

标签: php unix pst


【解决方案1】:

简单的解决方案是使用 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?

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 是的,我尝试在 3 月 14 日之前添加一个,但仍然会增加一个小时
    猜你喜欢
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    相关资源
    最近更新 更多