将日期时间值与php中的微秒进行比较

时间:2014-03-18 16:45:31

标签: php date datetime

我有一个来自数据库的日期时间值。该值将是一个像2014-03-18 10:34:10.938这样的微秒的日期时间。现在我必须将它与相同的值进行比较,该值也是数据库中的微秒日期时间值。我试过strtotime,但没有考虑微秒值。

所以任何人都可以建议一种比较这些值的方法。

我尝试了以下内容:

$val1 = '2014-03-18 10:34:10.938';
$val1 = '2014-03-18 10:34:10.800';

if(strtotime($val1) > strtotime($val2))
  //some code
else
  //some code

我也尝试过不使用strtotime

$val1 = '2014-03-18 10:34:10.938';
$val1 = '2014-03-18 10:34:10.800';

if($val1 > $val2)
  //some code
else
  //some code

方法2获得成功。所以我的问题是我使用正确的方法。?

修改

根据@showdev的重复标记,我尝试了以下

$val1 = '2014-03-18 10:34:09.999';
$val2 = '2014-03-18 10:34:09.940';

if(new DateTime($val1) > new DateTime($val2))
  echo "1 is bigger";
else
  echo "2 is bigger";
//Always output 2 is bigger unless i change $val1 seconds value

2 个答案:

答案 0 :(得分:2)

根据Example #2 of the DateTime::diff文档,您应该能够在DateTime对象上使用比较运算符。但是,它似乎没有考虑微秒。

E.g。如果你这样做

$val1 = '2014-03-18 10:34:09.939';
$val2 = '2014-03-18 10:34:09.940';

$datetime1 = new DateTime($val1);
$datetime2 = new DateTime($val2);
var_dump($datetime1->diff($datetime2));

您得到以下内容,但未显示“u”(microtime):

object(DateInterval)#3 (15) {
  ["y"]=>
  int(0)
  ["m"]=>
  int(0)
  ["d"]=>
  int(0)
  ["h"]=>
  int(0)
  ["i"]=>
  int(0)
  ["s"]=>
  int(0)
  ["weekday"]=>
  int(0)
  ["weekday_behavior"]=>
  int(0)
  ["first_last_day_of"]=>
  int(0)
  ["invert"]=>
  int(0)
  ["days"]=>
  int(0)
  ["special_type"]=>
  int(0)
  ["special_amount"]=>
  int(0)
  ["have_weekday_relative"]=>
  int(0)
  ["have_special_relative"]=>
  int(0)
}

这是一个适用于我的解决方法:

$val1 = '2014-03-18 10:34:09.999';
$val2 = '2014-03-18 10:34:09.940';
$datetime1 = new DateTime($val1);
$datetime2 = new DateTime($val2);

if($datetime1 > $datetime2)
  echo "1 is bigger";
else if ($datetime1->format('u') > $datetime2->format('u'))
  echo "1 is bigger";
else
  echo "2 is bigger";

答案 1 :(得分:1)

您正在进行字符串比较而不是日期比较,但是对于这种类型的格式字符串比较将正常工作。 如果需要,您可能希望尝试以不同的格式从数据库中提取数据,例如:

select concat(UNIX_TIMESTAMP(time), MICROSECOND(time)) from table.db;

这会将你的日期转换为微秒,并会让你的sql server为你做日期转换。