gpt4 book ai didi

PHP设置日期顺序并获取数据

转载 作者:行者123 更新时间:2023-11-29 03:47:22 25 4
gpt4 key购买 nike

我正在使用 PHP 从 mysql 数据库中获取日期。我想按照从今天到上一个日期的正确顺序设置日期,然后获取我想要的数据。

这是 PHP:

 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_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 查询,但你有两个问题:1) 你的日期存储在一种奇特的格式中,而不是真正的 mySQL 日期时间对象和 2 ) 您的日期未标准化时区。幸运的是,mysql 提供了本地函数来解决这两个问题:

你的时区指示器特别麻烦,因为它们的格式是 +HHMM 而不是全局标准 +HH:MM (用冒号分隔小时分钟。因此我们必须结合使用 SUBSTRING()CONCAT() 将它们转换为可用格式。

我同意该线程中其他评论者的意见,他们建议如果这些数据以更有意义的数据/时间格式存储,这个问题会更容易,但我也知道有时你会被草率的数据困住,并学习如何清理/操作不完美的数据集是编程的一部分。考虑到这一点,我提出以下算法:

  1. 将日期字符串分成两 block :最后 5 个字符(时区)和其他所有字符(日期时间)。
  2. 将时区分成两个额外的 block ,在字符 3 和 4 之间用冒号分隔,因此 +1200 变为 +12:00
  3. 通过 STR_TO_DATE 函数传递日期时间 block ,将每个部分映射到其适当的标记。这里的格式好像是:
weekday_abbrev, 2_digit_month month_abrev 4_digit_year 24_base_2_digit_hour:2_digit_minute:2_digit_second

转换为 STR_TO_DATE 标记后,此格式为:

'%a, %d %b %Y %H:%s:%i'
  1. 现在我们有了一个真正的日期时间对象和一个有意义的时区指示符。我们会将这两个传递给 CONVERT_TZ 以获得最终结果。
  2. 现在我们有一个针对时区规范化的真实日期时间对象,按该字段降序排列。

将它们放在一起,作为一个 mySQL 查询,这看起来像:

select 
CONVERT_TZ(
STR_TO_DATE(
received_date,
'%a, %d %b %Y %H:%s:%i'
),
'+00:00',
CONCAT(SUBSTRING(received_date, -5, 3), ':', SUBSTRING(received_date, -2, 2))
) as dateTime
from inbox
order by dateTime desc
limit 10

原始数据:

enter image description here

查询结果:

enter image description here

关于PHP设置日期顺序并获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57977700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com