数据库中的日期以不同的形式返回

Posted

技术标签:

【中文标题】数据库中的日期以不同的形式返回【英文标题】:Date from database returns in a different form 【发布时间】:2015-10-08 21:25:10 【问题描述】:

我正在尝试获取今天的日期,并将其与我的数据库中的日期进行比较,但是我的数据库中的日期以与我从日期函数获得的日期不同的形式返回,所以如果我比较它们if 语句,值总是为假。有没有办法让我比较它们以使其返回为真?

$date =  date('y-m-d'); //date from date function ---> 15/07/19
$dateFromDatabase; //date from database ---> 2015/07/19

if ($date == $dateFromDatabase) 
echo "It's the same day.";

【问题讨论】:

【参考方案1】:

strtotime

php 中有一些很棒的函数可以将人类可读的日期转换为时间戳

第一个魔术函数叫做 strtotime(字符串到时间):给它你的日期,你得到一个 UNIX 时间戳!让我们看一些例子:

echo strtotime('2008-04-12 13:24');
echo strtotime('12 april 2008 13:24');
echo strtotime('12.04.2008 13:24');

更强大的是,strtotime可以识别一些关键字:

echo strtotime('now');
echo strtotime('+4 days');
echo strtotime('+1 month');
echo strtotime('next monday');
echo strtotime('+2 weeks 3 days 4 hours 23 minutes');

strtotime 的第二个参数是一个时间戳,它的默认值是实际的时间戳(time())。所以 echo strtotime('+4 days') 是相对于当前时间的。当然你也可以给strtotime你的mysql日期! (注意你也可以使用mysql函数UNIX_TIMESTAMP,它会使用更多的资源)。

为了比较日期,现在只是一个细节:

// your first date coming from a mysql database (date fields) 
$dateA = '2008-03-01 13:34'; 
// your second date coming from a mysql database (date fields) 
$dateB = '2007-04-14 15:23'; 
if(strtotime($dateA) > strtotime($dateB)) 
    // bla bla 

比子字符串更好,不是吗?!

这里只是另一个例子,不是相对于当前日期,而是相对于特定日期:

strtotime('23 hours ago', strtotime('2005-04-13 14:00'));

这意味着相对于第二个给定日期的 23 小时前,它必须是时间戳。

用户手册没有给出支持的日期格式的完整描述。 Strtotime('dd/mm/YYYY') 不起作用,它只适用于 mm/dd/YYYY 格式。

dd/mm/YYYY格式的日期,可以使用explode()函数将其转换为YYYY-mm-dd,但我认为有更好的解决方案。

$date = '25/05/2010';
$date = str_replace('/', '-', $date);
echo date('Y-m-d', strtotime($date));

【讨论】:

如果我这样做怎么办? $date = '20'.$date; 该函数期望得到一个包含英文日期格式的字符串,并将尝试将该格式解析为 Unix 时间戳(自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数),

以上是关于数据库中的日期以不同的形式返回的主要内容,如果未能解决你的问题,请参考以下文章

“Java Date() 以 UTC 形式返回日期”——它实际上是啥意思?

SQL 使用日期范围从另一个表返回数据以放入列中

Excel 从 SQL 导入数据 - 日期以文本值形式出现

Dapper 返回反转日期格式

Spring Boot Actuator /env 端点以 XML 形式返回数据 - 为啥?

FileDownloader - 依赖于浏览器的不同行为