我有一个来自数据库的日期时间值。该值将是一个像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
答案 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为你做日期转换。