php - 如何只保留日期在其他日期之间的帖子?
问题描述
我有一些带有一些自定义字段的帖子,其中我有一个字符串格式的日期,所以我循环我的帖子并将它们中的每一个转换为日期,然后我做了一些按日期排序的操作:
foreach($posts as $post) {
$postid = $post->ID;
$myDate = \DateTime::createFromFormat('j-n-Y', get_post_meta($postid, 'usp-custom-80', true));
$postOrdered[$postid] = \DateTime::createFromFormat('j-n-Y', get_post_meta($postid, 'usp-custom-80', true));
wp_reset_query();
}
arsort($postOrdered);
var_export($postOrdered);
因此,我将日期与 ID 一起附加,这给了我们:
array ( 128288 => DateTime::__set_state(array( 'date' => '2017-08-20 20:36:02.000000', 'timezone_type' => 3, 'timezone' => 'UTC', )), 128166 => DateTime::__set_state(array( 'date' => '2017-08-17 20:36:02.000000', 'timezone_type' => 3, 'timezone' => 'UTC', )), 128308 =>
DateTime::__set_state(array( 'date' => '2017-08-05 20:36:02.000000', DateTime::__set_state(array( 'date' => '2000-03-20 20:36:02.000000',
DateTime::__set_state(array( 'date' => '1978-05-11 20:36:02.000000', 'timezone_type' => 3, 'timezone' => 'UTC', )), 128295 =>
DateTime::__set_state(array( 'date' => '1978-04-10 20:36:02.000000', 'timezone_type' => 3, 'timezone' => 'UTC', )), 128337 =>
DateTime::__set_state(array( 'date' => '1978-03-16 20:36:02.000000', 'timezone_type' => 3, 'timezone' => 'UTC', )), 128315 => DateTime::__set_state(array( 'date' => '1976-08-10 20:36:02.000000', 'timezone_type' => 3, 'timezone' => 'UTC', )), 128290 => DateTime::__set_state(array( 'date' => '1970-04-12 20:36:02.000000', 'timezone_type' => 3, 'timezone' => 'UTC', )), )
好的,现在我们要做的是从使用中获取一些 $start 和 $end 日期form
GET
$start = $_GET['start'];
$end = $_GET['end'];
$start = \DateTime::createFromFormat('j-n-Y', $start);
$end = \DateTime::createFromFormat('j-n-Y', $end);
var_dump($start);
var_dump($end);
这给了我们:
object(DateTime)#8267 (3) { ["date"]=> string(26) "2019-02-01 20:51:56.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" }
object(DateTime)#7974 (3) { ["date"]=> string(26) "2019-02-05 20:51:56.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" }
现在我要做的是简单检查这些帖子中是否有任何日期在我们的 $start 和 $end 之间,并显示它们的顺序为 ASC 或 DESC
从字面上看像
if ( ( $myDate >= $start) && ( $myDate <= $end) ) {
...my posts...
但这仍然给了我们所有的帖子,不管
解决方案
您可以直接比较DateTime
对象,因此您的代码可以编写为:
$start = \DateTime::createFromFormat('j-n-Y', $_GET['start']);
$end = \DateTime::createFromFormat('j-n-Y', $_GET['end']);
foreach($posts as $post) {
$postid = $post->ID;
$myDate = \DateTime::createFromFormat('j-n-Y', get_post_meta($postid, 'usp-custom-80', true));
if (($myDate >= $start) && ($myDate <= $end)) {
$postOrdered[$postid] = (int)$myDate->format('U');
}
wp_reset_query();
}
请注意,您帖子上的所有日期都在 2019 年之前,因此您需要调整$start
值才能查看输出中的任何帖子。
要获取唯一日期的排序列表,请在foreach
循环后使用以下代码:
$postOrdered = array_unique($postOrdered);
arsort($postOrdered);
推荐阅读
- sql - 如何在 BigQuery 中过滤地理数据
- html - 重叠 DIV,同时保持后一个可控
- opencart - 您好,我在 opencart 3.0.2.0 上安装了 ocmod,但是在尝试激活此扩展程序时出现此错误
- lua - 在 Windows 上逐步安装 lua 5.4 二进制文件和库
- swiftui - ContextMenu 中的 NavigationLink 不再在 iOS14 xcode12 beta3 中工作?
- elasticsearch - 查询搜索字符串完全包含索引字符串的位置
- java - 状态设计模式:使用 entry() 和 exit() 时如何避免代码重复?
- amazon-dynamodb - DynamoDB 表种子适用于 cli 但不适用于 AWS-SDK
- python - 在 Python 中合并两个大列表中的数据
- php - 如何创建自定义订单以显示帖子和分类法