4

我有以下格式的日期列表:

09-2012,10-2012,01-2013 

从列表中访问最小和最大日期的更好方法是什么?

4

4 回答 4

6

我不确定哪个更快。下面是我的仅列表解决方案,或者您可以将列表转换为数组并使用它。

不过,这可以完成工作:

<CFSET dates = "" />
<CFLOOP list="09-2012,10-2012,01-2013" index="date">
    <CFSET dates = listappend(dates,DateFormat(createDate(listlast(date,"-"),listfirst(date,"-"),1), "yyyy-mm-dd")) />
</CFLOOP>
<CFSET dates = listsort(dates,"numeric") />
<CFSET min_date = listfirst(dates) />
<CFSET max_date = listlast(dates) />
于 2012-06-20T10:04:37.690 回答
5

我建议将列表中的日期转换为 yyyy-mm-dd。

然后您可以使用 ListSort 对列表进行排序,您将通过 listfirst 和 listlast 获得第一个和最后一个日期

于 2012-06-20T09:56:37.777 回答
1

与 Seybsen 的回答类似,只是沿着正则表达式路径:

<cfscript>
var data = "09-2012,10-2012,01-2013";
data = listSort( reReplace( data, '([0-9][0-9])-([0-9][0-9][0-9][0-9])', '\2-\1', 'all' ), 'numeric', 'asc' );
var minDate = listFirst( data );
var maxDate = listLast( data );
</cfscript>
于 2012-06-21T14:07:26.717 回答
0

我修改了@Seybsen 的答案,以便在不进行查询查询的情况下从查询中找到最大日期:

<cfset maxCompletedDate = ListLast(ListSort(ValueList(queryName.completedDate), "numeric")) />

我想如果其他人正在寻找同样的东西,我会把它放在那里,但再次感谢@Seybsen。

顺便说一句,数据库中格式化的日期yyyy-mm-dd H:mm:ss。时间戳像2013-09-15 18:43:17

于 2013-11-15T19:32:49.840 回答