比较给定date和今天
我有以下
$var = "2010-01-21 00:00:00.0"
我想把这个date与今天的date进行比较(即我想知道这个$var
是否在今天之前或者等于今天)
我需要使用什么function?
strtotime($var);
将其转换为时间值
time() - strtotime($var);
给你$var
以来的秒数
if((time()-(60*60*24)) < strtotime($var))
将检查$var
是否在最后一天之内。
该格式对于标准string比较来说是非常合适的,例如
if (date1 > date2)
要获得这种格式的date,只需使用: date("Ymd H:i:s")
。
所以:
$today = date("Ymd H:i:s"); $date = "2010-01-21 00:00:00"; if ($date < $today) {
这是这种格式的美:它很好地命令。 当然,这可能是效率较低,取决于具体的情况,但也可能更方便,导致更易于维护的代码 – 我们需要了解更多才能真正做出判断。
对于正确的时区,您可以使用,例如,
date_default_timezone_set('America/New_York');
点击这里查看可用的PHP时区。
干得好:
function isToday($time) // midnight second { return (strtotime($time) === strtotime('today')); } isToday('2010-01-22 00:00:00.0'); // true
另外,还有一些辅助function:
function isPast($time) { return (strtotime($time) < time()); } function isFuture($time) { return (strtotime($time) > time()); }
要完成BoBby Jack,使用DateTime OBject,如果你有php 5.2.2+:
if(new DateTime() > new DateTime($var)){ // $var is before today so use it }
你可以使用DateTime
类:
$past = new DateTime("2010-01-01 00:00:00"); $now = new DateTime(); $future = new DateTime("2020-01-01 00:00:00");
比较操作员工作*:
var_dump($past < $now); // bool(true) var_dump($future < $now); // bool(false) var_dump($now == $past); // bool(false) var_dump($now == new DateTime()); // bool(true) var_dump($now == $future); // bool(false) var_dump($past > $now); // bool(false) var_dump($future > $now); // bool(true)
也可以从DateTime对象中获取时间戳值并进行比较:
var_dump($past ->getTimestamp()); // int(1262286000) var_dump($now ->getTimestamp()); // int(1431686228) var_dump($future->getTimestamp()); // int(1577818800) var_dump($past ->getTimestamp() < $now->getTimestamp()); // bool(true) var_dump($future->getTimestamp() > $now->getTimestamp()); // bool(true)
*请注意,比较两个不同的DateTime对象时,即使它们表示相同的date, ===
也会返回false。
$toBeComparedDate = '2014-08-12'; $today = (new DateTime())->format('Ym-d'); //use format whatever you are using $expiry = (new DateTime($toBeComparedDate))->format('Ym-d'); var_dump(strtotime($today) > strtotime($expiry)); //false or true
几年后,我第二个鲍比杰克的观察,过去24小时不是今天! 我很惊讶,答案是如此之高…
要比较某个date是否小于,等于或大于另一个date,首先需要将它们“closures”到一天的开始。 换句话说,确保你在两个date的时间都是相同的00:00:00。 这可以简单而优雅地完成:
strtotime("today") <=> strtotime($var)
如果$ var具有00:00:00的时间部分,就像指定的OP一样。
用你需要的任何东西来replace<=>(或者像这样在php 7中保存)
另外,显然,我们正在讨论两者的同一个时区。
一个基于我的经验的谨慎, 如果你的目的只涉及date,那么要小心,包括时间戳 。 例如,今天说的是"2016-11-09"
。 涉及时间戳的比较将使这里的逻辑无效。 例,
// input $var = "2016-11-09 00:00:00.0"; // check if date is today or in the future if ( time() <= strtotime($var) ) { // This seems right, but if it's ONLY date you are after // then the code might treat $var as past depending on // the time. }
上面的代码似乎是正确的,但如果它只是你想比较的date,那么上面的代码是不正确的逻辑。 为什么? 因为,time()和strtotime()将提供包括时间戳。 也就是说,尽pipe这两个date都是在同一天,但时间上的差别将会很重要。 考虑下面的例子:
// plain date string $input = "2016-11-09";
由于input是纯datestring,因此在$input
上使用strtotime()
将假定它是2016-11-09的午夜。 所以,在午夜之后的任何时候运行time()
都会把$input
当作过去,尽pipe它们在同一天。
要解决这个问题,你可以简单地编码,就像这样:
if (date("Ymd") <= $input) { echo "Input date is equal to or greater than today."; }
$date1=date_create("2014-07-02"); $date2=date_create("2013-12-12"); $diff=date_diff($date1,$date2);
(w3schools的例子,它完美的作品)
其他有用的例子可以是简单的PHP类。
它提供了许多方法以及比较function。
例如:
$date = new simpleDate(); echo $date->now()->compare('2010-01-21 00:00:00')->isBefore();
教程页面中也有很多例子。 请点击这里 。