【问题标题】:How to compare date and time after fetching from database using php?使用php从数据库中获取后如何比较日期和时间?
【发布时间】:2012-10-05 00:32:51
【问题描述】:

假设我在循环中运行这段代码,$fid 将在每一轮接收一个值:

     $result2 = mysql_query( "SELECT date_create FROM users WHERE id = $fid");

现在,date_create 将采用例如格式

2012-08-16 20:13:49

我的问题是,我如何检查该日期是否在 2012-08-31 之前,例如 2012-08-10 ?

我的完整代码,以防万一有人问起。

$query = "(SELECT distinct fid FROM coin WHERE uid = 59  )";
$result = mysql_query($query);
while($rows = mysql_fetch_array($result))
{
    $fid = $rows['fid'];
    echo 'fid || '.$fid;
    $result2 = mysql_query( "SELECT id, date_create FROM users WHERE id = $fid");
     $rows2 = mysql_fetch_array($result2);

     echo "  ||   users id : " . $rows2['id']; 

     if( $rows2['date_create'] < "2012-8-31") // How do i get something like this? 
     {

          echo "  ||   date_create : " . $rows2['date_create'] ." True"; 

     }
     else
     {
           echo "  ||   date_create : " . $rows2['date_create'] . "False"; 
     }  
    l();
}

到目前为止我得到的结果是这样的:

fid || 1112 || users id : 1112 || date_create : 2012-08-16 20:13:49 false <--
fid || 1113 || users id : 1113 || date_create : 2012-08-16 20:14:11 false <--
fid || 1115 || users id : 1115 || date_create : 2012-08-16 20:14:21 false <--
fid || 1117 || users id : 1117 || date_create : 2012-08-16 20:14:38 false <--
fid || 1118 || users id : 1118 || date_create : 2012-08-16 20:15:03 false <--
fid || 1119 || users id : 1119 || date_create : 2012-08-16 20:15:10 false <-- 

n.b 如果您也可以提供一种检查时间的方法,将不胜感激。这将是额外的:D

【问题讨论】:

标签: php database date time compare


【解决方案1】:

你可以这样使用:

$result = mysql_query($query);
$chk = strtotime("2012-08-31");
while( $rows = mysql_fetch_array($result) ) {
    $fid = $rows['fid'];
    echo 'fid || '.$fid;
    $result2 = mysql_query( "SELECT id, date_create FROM users WHERE id = $fid");
     $rows2 = mysql_fetch_array($result2);
     echo "  ||   users id : " . $rows2['id']; 
     if( $chk - strtotime($rows2['date_create']) > 0) {
          echo "  ||   date_create : " . $rows2['date_create'] ." True"; 
     }
     else {
           echo "  ||   date_create : " . $rows2['date_create'] . "False"; 
     }
    l();
}

php.net 上strtotime() 的文档。

【讨论】:

  • 其中一个答案按照你的建议做了,但是,他添加了 strtotime('2012-08-10') + 24 * 60 * 60
【解决方案2】:

最好使用以下查询:

SELECT id, date_create,unix_timestamp(date_create) as time_stamp FROM users WHERE id = $fid"

并比较 time_stamp 变量是 int

【讨论】:

  • 我更愿意按原样获取日期并在其他地方进行比较。感谢您的努力。
【解决方案3】:

您可以通过转换日期/时间字符串并使用strtotime() 进行比较来做到这一点。使用该方法,您还可以调整它以进行几秒钟的比较:

//this effectively checks to see that the time is greater than '2012-08-16 20:13:49'
//the total calculated time on the RHS of the >= operator is effectively '2012-08-16 20:13:49'
//hence, this will echo 'YES'

//this is of the form: hours, minutes, seconds
$time_difference = (44 * 60 * 60) + (13 * 60) + 49;

if (strtotime('2012-08-16 20:13:49') >= strtotime('2012-08-15') + $time_difference)
{
  echo 'YEAH';
}
else
{
  echo 'NO';
}

更新:

来自strtotime() 上的 PHP 文档:

时间戳的有效范围通常是从 1901 年 12 月 13 日星期五开始 20:45:54 UTC 至 2038 年 1 月 19 日星期二 03:14:07 UTC。 (这些是日期 对应于 32 位有符号的最小值和最大值 整数。)此外,并非所有平台都支持负时间戳, 因此您的日期范围可能限制在不早于 Unix 时代。这意味着例如1970 年 1 月 1 日之前的日期无效 在 Windows、一些 Linux 发行版和其他一些操作系统上 系统。 PHP 5.1.0 和更新的版本克服了这个限制。

对于 64 位版本的 PHP,时间戳的有效范围是 实际上是无限的,因为 64 位可以表示大约 293 十亿年的时间。

【讨论】:

  • +1 和正确答案,此外,它看起来不错。你对此有多大信心?
  • 非常。我更新了我的答案,以便更好地为您澄清。总之,比较日期 ('2012-08-15') 是 exactly (44 * 60 * 60) + (13 * 60) + 49; 秒2012-08-16 20:13:49'.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多