1

我正在 WordPress 中编写一个函数来将 XML 文件中的数据添加到 MySQL 数据库中。在我从 XML 中获得日期值之后,问题就发生了。这是一个字符串类型,我使用以下代码将其格式化为日期时间:

$mysqlDay = date('d/m/Y',strtotime($day));

$day是从 XML 检索的日期值:“25/01/2013”​​(d/m/Y)。的值为$mysqlDay“01/01/1970”(d/m/Y)。为什么变量$mysqlDay具有开始日的值而不是$day?如果我想将它从字符串格式化为日期,我该怎么办?

在与上述类似的问题中,如果我想将格式为“18:00”(H:M) 的字符串转换为时间,我该怎么办?

我在 WordPress 中使用此代码将这些值添加到数据库中:

$wpdb->insert('wp_lps',
  array('date'=>$mysqlDay,
  'start'=> $mysqlStartTime, 
  'end'=> $mysqlEndTime),
  array('D/M/Y',
  'H:M',
  'H:M')
  );

这是正确的吗?wp_lps是我创建的表,$mysqlStartTime需要$mysqlEndTime格式化为H:M。

4

3 回答 3

2

您可以改用 DateTime :

$mysqlDay = DateTime::createFromFormat('d/m/Y', $day);

它更优雅,面向对象。

于 2013-01-25T12:50:32.190 回答
1

我的另一个答案中,我回答了您实际提出的问题。然而,事实证明(在评论中进行了多次讨论之后),这是一个错误的问题

情况如下:您有一些 XML,其中包含 d/m/Y 格式的日期。您可以使用 SimpleXML 获取它。现在您有了一个 SimpleXML 对象。现在你想把它放到数据库中。

  1. 将对象转换为字符串:

    $date = (string)$date;
    
  2. 将日期转换为 MySQL 识别为日期的格式。

    $date = date('Y-m-d', strtotime(str_replace('/', '-', $date)));
    
  3. 使用库将日期插入数据库$wpdb

你的问题出在几个地方:

  1. strtotime()由于我的其他答案中列出的原因,日期的格式无法识别。
  2. 您似乎认为需要一个日期对象才能将日期保存到 MySQL 数据库中。你没有。您想要的是 MySQL 识别为日期格式的字符串。您的代码和数据库之间的所有查询都在一种称为 SQL 的语言中发生,这完全是在字符串中发生的。您可能正在使用一个为您抽象出来的库($wpdb),但它仍然是引擎盖下的字符串。
  3. 您似乎认为date()和/或strtotime()返回了日期对象。他们没有。该date()函数返回一个字符串。该strtotime()函数返回一个整数(它是一个 UNIX 时间戳)。
  4. 您尝试做的是获取格式为 d/m/Y 的日期(字符串),将其转换为表示 UNIX 时间戳的整数,然后将其转换回表示格式为 d/m/ 的日期的字符串Y,然后将其添加到数据库中。这在两个地方失败了:
    • strtotime()函数假定如果字符串中有斜线,则它是美式日期。
    • MySQL 实际上也不喜欢这种日期格式。它想要 Ymd。
于 2013-01-25T20:21:45.820 回答
0

m/d/y 或 dmy 格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜杠 (/),则假定为美式 m/d/y;而如果分隔符是破折号 (-) 或点 (.),则假定为欧洲 dmy 格式。

文件说。

所以你想在调用之前将这些斜杠转换为连字符strtotime()

于 2013-01-25T12:48:27.507 回答