PHP设置日期顺序并获取数据
我正在使用PHP从mysql数据库中获取日期。我想以正确的顺序设置日期,从今天日期到上一个日期,然后获取我想要的数据 以下是PHP:PHP设置日期顺序并获取数据,php,mysql,Php,Mysql,我正在使用PHP从mysql数据库中获取日期。我想以正确的顺序设置日期,从今天日期到上一个日期,然后获取我想要的数据 以下是PHP: try { $stmt = $link->prepare("SELECT * FROM inbox LIMIT 10"); $stmt->execute(); // set the resulting array to associative $result = $stmt->setFetchMode(PDO:
try {
$stmt = $link->prepare("SELECT * FROM inbox LIMIT 10");
$stmt->execute();
// set the resulting array to associative
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach($stmt->fetchAll() as $k=>$v) {
$received_date = $v['received_date'];
echo $received_date;
}
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
?>
它给我这样的输出:
Fri, 31 Aug 2018 14:52:16 -0600
Mon, 13 Aug 2018 00:29:38 +0000 (UTC)
Mon, 13 Aug 2018 01:28:25 +0100
Mon, 3 Sep 2018 16:46:06 -0600
Mon, 3 Sep 2018 17:50:33 -0600
Fri, 7 Sep 2018 16:47:46 -0600
Fri, 7 Sep 2018 13:41:08 -0600
Tue, 4 Sep 2018 15:11:51 -0600
Tue, 11 Sep 2018 02:30:57 +0100
Tue, 11 Sep 2018 02:30:22 +0100
以下是我想要实现的目标:
Tue, 11 Sep 2018 02:30:57 +0100
Tue, 11 Sep 2018 02:30:22 +0100
Fri, 7 Sep 2018 16:47:46 -0600
Fri, 7 Sep 2018 13:41:08 -0600
Tue, 4 Sep 2018 15:11:51 -0600
Mon, 3 Sep 2018 17:50:33 -0600
Mon, 3 Sep 2018 16:46:06 -0600
Fri, 31 Aug 2018 14:52:16 -0600
Mon, 13 Aug 2018 01:28:25 +0100
Mon, 13 Aug 2018 00:29:38 +0000 (UTC)
我不知道如何按照正确的顺序设置日期,从今天开始,然后到上一个日期,并获取所需的数据。我使用的received\u date
列是一个文本,因此我将它们作为字符串存储在数据库中
我想以正确的顺序设置日期,因为我想获取从今天日期到上一个日期的数据,这样我就可以在我的页面中输出它们,我可以用它来检查我的电子邮件
您能给我举个例子,说明我如何按照正确的顺序设置日期,即从今天开始的日期到我可以同时获取数据的之前日期
编辑:当我尝试此操作时:
$stmt = $link->prepare("SELECT * FROM inbox ORDER BY received_date DESC LIMIT 10");
它会给我这个:
Wed, 31 Oct 2018 11:14:38 -0400
Wed, 29 Aug 2018 16:44:17 -0400
Wed, 27 Mar 2019 21:37:05 +0000
Wed, 27 Mar 2019 03:37:05 +0000
Wed, 26 Sep 2018 18:45:40 -0400
Wed, 24 Oct 2018 23:11:11 -0400
Wed, 24 Apr 2019 19:43:06 +0100
Wed, 24 Apr 2019 01:43:07 +0100
Wed, 22 Aug 2018 16:11:48 -0400
Wed, 19 Sep 2018 19:35:45 -0400
应该是:
Wed, 24 Apr 2019 19:43:06 +0100
Wed, 24 Apr 2019 01:43:07 +0100
Wed, 27 Mar 2019 21:37:05 +0000
Wed, 27 Mar 2019 03:37:05 +0000
Wed, 31 Oct 2018 11:14:38 -0400
Wed, 24 Oct 2018 23:11:11 -0400
Wed, 26 Sep 2018 18:45:40 -0400
Wed, 19 Sep 2018 19:35:45 -0400
Wed, 29 Aug 2018 16:44:17 -0400
Wed, 22 Aug 2018 16:11:48 -0400
以下是我在数据库中存储字符串的内容:
Wed, 31 Oct 2018 11:14:38 -0400
Wed, 29 Aug 2018 16:44:17 -0400
Wed, 27 Mar 2019 21:37:05 +0000
Wed, 27 Mar 2019 03:37:05 +0000
Wed, 26 Sep 2018 18:45:40 -0400
Wed, 24 Oct 2018 23:11:11 -0400
Wed, 24 Apr 2019 19:43:06 +0100
Wed, 24 Apr 2019 01:43:07 +0100
Wed, 22 Aug 2018 16:11:48 -0400
Wed, 19 Sep 2018 19:35:45 -0400
以这种方式创建mysql表(UTC时间,并使用此值排序):
在我看来,这个问题的基本问题是,您需要构建一个按日期排序的mySQL查询,但您有两个问题:1)您的日期是以一种奇特的格式存储的,而不是真正的mySQL datetime对象;2)您的日期不是时区标准化的。幸运的是,mysql提供了本机函数来解决这两个问题:
+HHMM
,而不是全球标准+HH:MM
(用冒号将小时与分钟分隔。因此,我们必须结合使用和将其转换为可用格式
我同意这篇文章中的其他评论者的观点,他们认为如果这些数据以更有意义的数据/时间格式存储,这个问题会更容易解决,但我也知道有时候你会被杂乱无章的数据所困扰,学习如何清理/操作不完美的数据集是编程的一部分算法:
+1200
变为+12:00
'%a, %d %b %Y %H:%s:%i'
选择
转换(
截止日期(
收到日期:,
“%a,%d%b%Y%H:%s:%i”
),
'+00:00',
CONCAT(子字符串(接收日期-5,3),“:”,子字符串(接收日期-2,2))
)作为日期时间
从收件箱
按日期时间顺序描述
限制10
原始数据:
$stmt = $link->prepare("SELECT * FROM inbox ORDER BY received_date DESC LIMIT 10");
查询结果:
$stmt = $link->prepare("SELECT * FROM inbox ORDER BY received_date DESC LIMIT 10");
@NigelRen是的,有点像,但日期并没有显示我想要实现的目标,因为它会显示像2018年10月31日11:14:38-0400 Wed,2018年8月29日16:44:17-0400什么时候应该是
Wed,2019年4月24日19:43:06+0100 Wed,2019年4月24日01:43:07+0100
@Script47我已经尝试过了,但它会给我不在corr中的日期ect order。请查看我更新的问题。您将希望在mysql中将日期存储为日期,以便您可以像其他人建议的那样利用order by
。您可以在事后执行此操作,但除非您查询所有记录而不是10条记录,否则结果将不正确。@RobertJones最好回答一个新问题,如何将日期字符串转换为日期n mysql(或沿着这些思路)。