php - PHP中的日期数组排序
问题描述
有没有可能用这种日期类型的值对数组进行排序?
$dates = [
"June 8-12",
"June 15-19",
"June 22-26",
"June 29 - July 2",
"July 10-24",
"July 6-10",
"July 27-31",
"July 13-17",
"July 20-24",
"July 8",
"August 3-7",
"August 10-14"
];
解决方案
这是一个可能的解决方案。
首先,我截断间隔以仅保留开始日期(我认为这是最合乎逻辑的做法,但您可以根据自己的需要进行调整)。
然后,我构建日期对象(并采用闰年以避免 2 月 29 日出现问题)。
最后,您可以依靠日期对象比较对日期进行排序:
$dates = [
"June 8-12",
"June 15-19",
"June 22-26",
"June 29 - July 2",
"July 10-24",
"July 6-10",
"July 27-31",
"July 13-17",
"July 20-24",
"July 8",
"August 3-7",
"August 10-14",
];
function myCompDates($s1, $s2)
{
// if interval, keep only the begin date
if(strpos($s1, '-') !== false) $s1 = trim(explode('-', $s1)[0]) ;
if(strpos($s2, '-') !== false) $s2 = trim(explode('-', $s2)[0]) ;
// create Date object for both string
$d1 = DateTime::createFromFormat('Y F d', '2004 ' . $s1);
$d2 = DateTime::createFromFormat('Y F d', '2004 ' . $s2);
// use date object comparison
if( $d1 == $d2 ) return 0 ;
elseif($d1 < $d2) return -1 ;
else return 1 ;
}
usort($dates, 'myCompDates');
print_r($dates);
输出 :
大批
(
[0] => 6 月 8 日至 12 日
[1] => 6 月 15 日至 19 日
[2] => 6 月 22 日至 26 日
[3] => 6 月 29 日 - 7 月 2 日
[4] => 7 月 6 日至 10 日
[5] => 7 月 8 日
[6] => 7 月 10 日至 24 日
[7] => 7 月 13 日至 17 日
[8] => 7 月 20 日至 24 日
[9] => 7 月 27 日至 31 日
[10] => 8 月 3 日至 7 日
[11] => 8 月 10 日至 14 日
)
推荐阅读
- google-bigquery - 如何在不同值小于 Google BigQuery 中的给定数字的情况下对每列进行数组聚合?
- r - 在R中按日期将文件复制到目录中
- raspberry-pi - Bluez 与我的 BLE 遥控器配对后崩溃
- mysql - SELECT DISTINCT 返回不正确的结果
- c# - 如何有效管理 Windows 服务中的异步任务
- r - 如何在基础 R 中绘制自定义矢量场?
- scala - Spark - 使用公共键合并多个地图列
- openssl - 在 AIX 上编译 OpenSSH (PKIXSSH) 时无法与 OpenSSL 加密库链接
- node.js - 使用连接表对 where 范围进行 Sequelize
- python - 使用 pandas 过滤 excel 工作表中的条件格式