Neo*_*nig 0 string coldfusion datetime date
在ColdFusion 10中:
我正在尝试从来自datepicker的字符串返回有效的日期时间字符串.
字符串格式为:
15 Aug 2014 - 12:47 PM
Run Code Online (Sandbox Code Playgroud)
我想最终得到:
{ts '2014-08-15 12:47:00'}
Run Code Online (Sandbox Code Playgroud)
我写了这个可怕的函数来获取字符串的每个部分并尝试createDateTime():
public function formatDateTimeFromPicker(required string thedate){
var c={};
var d=arguments.thedate;
c.year=listGetAt(d, 3, " ");
c.month=returnMonthAsNumber(listGetAt(d, 2, " "));
c.day=listGetAt(d, 1, " ");
c.time=listGetAt(d, 5, " ");
c.hour=listGetAt(c.time, 1, ":");
c.minute=listGetAt(c.time, 2, ":");
c.tt=listGetAt(d, 6, " ");
if(c.tt == "PM" AND c.hour NEQ 12){
c.hour=(c.hour + 12);
}
return createDateTime(c.year, c.month, c.day, c.hour, c.minute, 00);
}
public function returnMonthAsNumber(required string monthstring){
var months="Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec";
return listFindNoCase(months, arguments.monthstring);
}
Run Code Online (Sandbox Code Playgroud)
它有点工作,但肯定有更好的方法吗?
你可能会过度思考它.唯一阻止它解析为日期的东西就是破折号.所以摆脱.概念证明:
original = "15 Aug 2014 - 12:47 PM";
dateString = replace(original, "-", "", "ONE");
try {
date = parseDateTime(dateString);
} catch (any e){
date = e.message;
}
writeDump([original,dateString,date]);
writeOutput(date);
Run Code Online (Sandbox Code Playgroud)
输出:
2014年8月15日 - 下午12:47
2014年8月15日下午12:47
2014年8月15日12:47:00
{ts'2014-08-15 12:47:00'}