与UTC日期进行比较的问题

时间:2014-06-08 07:00:07

标签: php

我在比较两个日期时遇到问题,无法弄清楚出了什么问题。我正在解析XML文件,并希望包含一个项目,如果它在当前日期内。

日期相同但未包括在内。有人可以告诉我这里我做错了什么,或者可能不理解?

date_default_timezone_set( "UTC" );

$unix = date( 'U', strtotime( $item['pubDate'] ) ); // $item['pubDate'] = 'Sunday, June 08, 2014 12:59:36 AM'

if(date('Y-m-d', $unix) == date("Y-m-d")){ // My date = 1402209579 - me  = 06 / 08 / 14 @ 6:39:39am UTC
  ... Expecting this item to be included as the dates are the same
}

1 个答案:

答案 0 :(得分:0)

这对我来说很奇怪,因为使用样本日期为Sunday, June 08, 2014 12:59:36 AM的示例代码对我来说很好。但是,因为你说某些日期在XML文件中有效。其他人没有,我认为那里的日期可能会有一些奇怪的特征。因此,建议使用preg_replace - 加上trim - 清除日期数据,然后再对其进行操作:

date_default_timezone_set( "UTC" );

$pubDate = 'Sunday, June 08, 2014 12:59:36 AM'; // $item['pubDate'] = 'Sunday, June 08, 2014 12:59:36 AM'

$pubDate_cleaned = trim(preg_replace('/[^a-zA-Z0-9,: ]/is', '', $pubDate));

$unix = date('U',strtotime($pubDate_cleaned));

if (date('Y-m-d', $unix) == date("Y-m-d")) { // My date = 1402209579 - me  = 06 / 08 / 14 @ 6:39:39am UTC
  echo 'Yes! The dates match!';
}

正则表达式/[^a-zA-Z0-9,: ]/is的想法是删除字符串中不是字母的任何字符,而不是数字&不是字符,:或日期格式中的空格。然后trim清除左侧和左侧的空间。字符串的右侧,所以它都是干净的。

如果strtotime转换中存在任何unicode gremlins或其他您可能不想要的内容,则应该真正规范化日期。

相关问题