在php,wordpress CMS中将字符串转换为时间

时间:2013-01-25 12:43:20

标签: php wordpress

我正在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。

3 个答案:

答案 0 :(得分:2)

您可以改为使用DateTime:

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

它更优雅,面向对象。

答案 1 :(得分:0)

  

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

documentation

因此,您希望在调用strtotime()之前将这些斜杠转换为连字符。

答案 2 :(得分:0)

my other answer中,我回答了你实际问过的问题。然而,事实证明(在评论中进行了大量讨论之后),这是错误的问题

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

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

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

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

  4. 您的问题出现在以下几个地方:

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