我正在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。
答案 0 :(得分:2)
您可以改为使用DateTime:
$mysqlDay = DateTime::createFromFormat('d/m/Y', $day);
它更优雅,面向对象。
答案 1 :(得分:0)
通过查看各个组件之间的分隔符来消除m / d / y或d-m-y格式的日期:如果分隔符是斜杠(/),则假设为美国m / d / y;而如果分隔符是破折号( - )或点(。),则假定为欧洲d-m-y格式。
因此,您希望在调用strtotime()
之前将这些斜杠转换为连字符。
答案 2 :(得分:0)
在my other answer中,我回答了你实际问过的问题。然而,事实证明(在评论中进行了大量讨论之后),这是错误的问题。
情况如下:您有一些XML,其中包含d / m / Y格式的日期。您可以使用SimpleXML获取它。现在你有了一个SimpleXML对象。现在你想进入数据库。
将对象转换为字符串:
$date = (string)$date;
将日期转换为MySQL识别为日期的格式。
$date = date('Y-m-d', strtotime(str_replace('/', '-', $date)));
使用$wpdb
库将日期插入数据库。
您的问题出现在以下几个地方:
strtotime()
无法识别的格式。$wpdb
),但它仍然是引擎盖下的字符串。date()
和/或strtotime()
返回了日期对象。他们没有。 date()
函数返回一个字符串。 strtotime()
函数返回一个整数(这是一个UNIX时间戳)。strtotime()
函数假设如果一个字符串中有斜杠,那就是美式日期。