我有以下格式的日期列表:
09-2012,10-2012,01-2013
从列表中访问最小和最大日期的更好方法是什么?
我不确定哪个更快。下面是我的仅列表解决方案,或者您可以将列表转换为数组并使用它。
不过,这可以完成工作:
<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) />
我建议将列表中的日期转换为 yyyy-mm-dd。
然后您可以使用 ListSort 对列表进行排序,您将通过 listfirst 和 listlast 获得第一个和最后一个日期
与 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>
我修改了@Seybsen 的答案,以便在不进行查询查询的情况下从查询中找到最大日期:
<cfset maxCompletedDate = ListLast(ListSort(ValueList(queryName.completedDate), "numeric")) />
我想如果其他人正在寻找同样的东西,我会把它放在那里,但再次感谢@Seybsen。
顺便说一句,数据库中格式化的日期yyyy-mm-dd H:mm:ss
。时间戳像2013-09-15 18:43:17