【问题标题】:PHP UNIX Timestamp not iterating to the same valuePHP UNIX时间戳没有迭代到相同的值
【发布时间】:2017-03-17 17:36:10
【问题描述】:

我遇到了 unix 时间戳、php 和 mysql 的问题,如果有人可以向我解释我哪里出错了,或者如果我没有,那我为什么会得到我得到的数字,那就太好了。

当我使用 jquery datepicker 以年-月-日格式将日期传递给 php 时,小时和分钟已在时间戳中默认设置为 23:00:00,即使我没有在请求中传递此信息.所以我的问题是这个幻影 23:00:00 是从哪里出现的?

工作流程:

使用 datepicker: datepicker -> php -> mysql = TIMESTAMP,时间设置为 23:00:00。

不使用 datepicker: php->mysql = TIMESTAMP 带有正确的小时和分钟。

感谢阅读。

编辑:按要求编写 PHP 代码:

PHP code:

$setdatealpha = $_POST['datepickeralpha'];
$setdatealpha = strtotime($setdatealpha);

// With this, I am inserting into MySQL like so:


$sql = "INSERT INTO TABLE (DATE_FIELD) VALUES (?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('s',$setdatealpha);
$stmt->execute();

现在,当我读回输入的信息并通过 date('Y-m-d',timestamp) 将其转换为日期时间格式时,日期输入正确且时间输入值为 23:00:00。

如果我通过 strtotime (date) 进行标准转换,则不会发生这种情况;

【问题讨论】:

  • 你能把处理它的php代码粘贴到这里吗

标签: php jquery html mysql


【解决方案1】:

根据当前可用的信息,我建议您确保每个时间戳都采用 UTC。我总是遇到时区问题。

对于 PHP,例如:$current_timestamp = strtotime($date." UTC");
对于 jQuery datepicker,我发现了这个 stackoverflow 线程:How to obtain utc time in jQuery datetimepicker

【讨论】:

  • 不错的提示。但是,请注意(如果不小心使用)这可能会导致网站用户进入例如March 30th 并返回 March 29th,这至少可以说是令人困惑的。您每次都必须使用相同的时区。
【解决方案2】:

很可能是时区。

首先,让我们澄清一下上下文。 strtotime() 产生一个 Unix 时间戳,你显然用它来输入 DATE_FIELD。如果可行,则表示该列是INTEGER。在这种情况下,您事后做了一些事情来显示日期,而您没有共享该部分——此外,MySQL 在这里是无辜的,因为它甚至不知道 DATE_FIELD 是什么意思。

虽然strtotime() 可以输入原始日期,但它也需要生成时间。除非它知道时区,否则它无法做到这一点。此外,当您有一个带有 Unix 时间戳的整数变量并且想要将其显示为正确的日期时,您还需要知道时区。

在这两种情况下,如果您不提供它,PHP 将使用默认值:

var_dump(date_default_timezone_get());

所以你可能想设置一个已知的,例如date_default_timezone_set()。但是,您的用户可能与您的时区不同,因此您的时区对他们来说毫无意义。由于您提示用户输入原始日期(没有时间),因此时间实际上可能与问题无关。在这种情况下,您可能需要:

  1. DATE_FIELD 设为DATE 类型。
  2. 避免使用strtotime() 和类似的东西。您可能想改用checkdate()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 2017-04-25
    • 2012-08-24
    • 2019-09-02
    相关资源
    最近更新 更多