从datepicker字符串创建DateTime(coldfusion)

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)

它有点工作,但肯定有更好的方法吗?

Ada*_*ron 6

你可能会过度思考它.唯一阻止它解析为日期的东西就是破折号.所以摆脱.概念证明:

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'}