我有以下数组
$dates = array(
'2015-02-13',
'2015-04-21',
'2015-08-18',
'2015-11-26',
'2015-09-15',
'2015-01-07',
'2015-02-11',
'2015-07-14',
'2015-03-02',
);
字符串
我想从最早到最近的日期对这个数组进行排序。
foreach ($dates as $date) {
$date = new DateTime($date);
// The logic I need
}
型
你能帮帮我吗?
编辑
我想指出的是,日期格式可以有所不同。为了详细说明,我在我的数据库中的日期格式为YYYY-MM-DD
,YYYY/MM/DD
,DD-MM-YYYY
和DD/MM/YYYY
。
但正如下面所建议的,我可以重新格式化日期并构建一个新数组。所以这可能不是问题。
9条答案
按热度按时间wfauudbj1#
php在
MM DD YYYY
下不能很好地工作,因为day
和month
之间的混淆。对于第一个和第二个条件
YYYY-MM-DD
或YYYY/MM/DD
,您可以遵循以下解决方案:字符串
输出值:
型
FYI:您可以尝试将
-
更改为/
如果格式类似于
YYYY DD MM
(无论是/
还是-
),您可以看到以下解决方案:样品输入:
型
功能说明:
型
输出量:
型
wsewodh22#
根据您的日期格式(在您的情况下,可以使用Y-m-d),只需执行排序
字符串
j91ykkif3#
您拥有的日期是缩短的ISO 8601格式,即
YYYY-MM-DD
。它们有一个很好的特性,即词法排序顺序与日期顺序相同。所以,只需使用默认的排序函数对数组进行排序。它就可以工作了。
当在代码中处理日期字符串时,最好使用ISO 8601作为规范的内部日期格式。尽快将用户提供的格式转换为ISO 8601,如果用户需要在自己的语言环境中输出,则尽可能推迟。当然,使用“适当”的日期对象更好!
dgtucam14#
只需尝试将所有日期格式转换为时间数字。
字符串
对于所有的日期格式都这样做,然后你就有了一个数字数组,你可以很容易地对它们进行排序。
型
vlurs2pr5#
您可以使用
strtotime()
进行转换以安全地进行日期操作,然后可以重新排序数组:字符串
ssgvzors6#
使用PHP sort函数
字符串
输出量:
型
请记住,这适用于'Y-m-d'格式。对于其他格式,您需要使用strtotime()函数转换为日期格式并继续进行。类似于这样的(标准格式):
型
m/d/y或d-m-y格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜线(/),则假定为美国m/d/y格式;而如果分隔符是破折号(-)或点(.),则假定为欧洲d-m-y格式。
6yjfywim7#
试试这个快速排序算法。它所做的是,它将日期与从
Jan 01 1970 (UTC))
开始的Unix Timestamp
进行比较,然后将其排序并放入数组中。转换为
Unix Timestamp
确保ISO8601
日期格式。字符串
//输出
型
uemypmqf8#
我有一个解决方案给你,希望这将有助于你排序,因为这是为我工作。
我建议你使用
usort()
与自定义函数:字符串
希望这对你有帮助。
knpiaxh19#
好吧,既然你提到你所有的日期都有以下格式:YYYY-MM-DD,YYYY/MM/DD,DD-MM-YYYY和DD/MM/YYYY
首先,你需要将它们转换成一种格式,让我们使用YYYY-MM-DD。然后,正如已经提到的,你只需要常规排序。
包括如何重新格式化字符串,而不必为每个字符串创建一个日期对象。
字符串
将打印:
型
如果你想换个方式,就用
rsort($dates)
吧。