【问题标题】:PHP date_create failing when trying to use timestamp from mysql db尝试使用 mysql db 中的时间戳时 PHP date_create 失败
【发布时间】:2020-05-23 23:54:46
【问题描述】:

我只是想找出为什么我不断收到此错误:

Notice: Undefined variable: flsrfc

现在 $flsrfc 设置如下:

if (date_create($flstart)) {
   $flsdt = date_create($flstart);
   if ($flsdt) {
      $flsrfc = date_format($flsdt, "Y-m-d\TH:i");
   } else {
      $flsrfc = date_format(date_create(time()), "Y-m-d\TH:i");
   }
}

现在我遇到的问题是尝试使用我想要获取的格式化时间设置日期时间本地输入。这是代码以及错误说明它的来源。我的猜测是 date_create 函数不起作用,但我不知道为什么。

$HTMLOUT .= '<input name="fls" value="'.$flsrfc.'" size="30" type="datetime-local" />';

我确定 $flstart 正在从数据库中获取数据,这是它的代码:

$flstart = mysqli_fetch_row(mysqli_query("SELECT value FROM config WHERE name = 'flstart'"))[0];

我已经阅读了许多 php 的手册页和文档,试图找出原因,我在时间戳上尝试了 strtotime,不行,我还尝试将它强制转换为整数也是同样的问题。有人可以为我指出正确的方向吗?谢谢。

【问题讨论】:

  • value 是什么列类型?实际价值是多少? The docs 描述date_create() 可以解析的格式。
  • value 是一个 VARCHAR,因为该表包含多种数据。
  • 您发布的内容不适用于查询。你没有传递给它的连接。

标签: php mysql datetime


【解决方案1】:

您的问题是,如果 date_create 失败,$flsrfc 永远不会被设置。您应该将该代码重写为:

if (($flsdt = date_create($flstart)) !== false) {
    $flsrfc = date_format($flsdt, "Y-m-d\TH:i");
} 
else {
    $flsrfc = date("Y-m-d\TH:i");
}

请注意,您可以通过调用date 来简化else 部分,因为它的默认输入是time() 的输出。

date_create 失败的原因而言,这将取决于表中数据的格式。如果您将其存储为 MySQL datedatetime 类型,则应该没有问题。否则,您可能需要使用 date_create_from_format 和适当的格式参数来匹配表中存储的内容。

【讨论】:

  • 它存储为 Unix 时间戳,我只是想将其转换为日期,然后将该日期格式化为本地日期时间格式。
  • @BrianSykes 在这种情况下,您可以简单地使用 $flsrfc = date("Y-m-d\TH:i", $flstart); date 函数将 unix 时间戳作为其第二个参数
  • @BrianSykes 不用担心 - 我很高兴能提供帮助。
  • @BrianSykes 不是mysql,它不会mysqli_query("SELECT,你忽略了这个连接。
  • @FunkFortyNiner 看不到邪恶,听不到邪恶...... :-)
猜你喜欢
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-22
  • 2012-09-21
  • 1970-01-01
相关资源
最近更新 更多