as3 - 格式化mysql的时间戳字符串

时间:2009-11-13 01:31:22

标签: php mysql actionscript-3 string formatting

我从php文件中收到一个日期字段,我需要格式化它。 我收到这个字符串:“2009-11-12 17:58:13” 我想转换为“2009年11月12日下午5:58:13”

我尝试使用Date类,但我得到这样的东西: 类型强制失败:无法将“2009-11-12 17:58:13”转换为日期。

任何人都知道这样做有什么好的工具吗?

5 个答案:

答案 0 :(得分:4)

如果没有简单的解决方案,您可以使用正则表达式:

private function formatDate(str:String):String
{

    var regex:RegExp = /(\d+)-(\d+)-(\d+)\s(\d+):(\d+):(\d+)/;
    var matches:Object = regex.exec(str);       
    var date:Date = new Date(matches[1], Number(matches[2]) - 1, matches[3], 
        matches[4], matches[5], matches[6]);
    var months:Array = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", 
        "Sep", "Oct", "Nov", "Dec"];
    var result:String = months[date.month] + " ";
    result += date.date + ", " + date.fullYear + " ";
    if(date.hours > 12)
        result += (date.hours - 12) + ":" + date.minutes + ":" + 
            date.seconds + " pm";
    else
        result += date.hours + ":" + date.minutes + ":" + date.seconds + " am";
    return result;
}

正则表达式/(\d+)-(\d+)-(\d+)\s(\d+):(\d+):(\d+)/

的说明
// Forward slashes - / - at the beginning and end are delimiters

\d+ /* One or more number of digits. 
     * Ideally it should be \d{n} (\d{4} - 4 digits), 
     * but I'm assuming that the input string would always be 
     * valid and properly formatted
     */

- and : //A literal hyphen/colon 

\s   //A whitespace (use \s+ to skip extra whitespaces)

()  /* Parenthetic groups used to capture a string for using it later
     * The return value of regex.exec is an array whose first element is 
     * the complete matched string and subsequent elements are contents
     * of the parenthetic groups in the order they appear in the regex
     */

答案 1 :(得分:3)

内置的Date类有一个parse(),应该能够将该字符串解析为真正的Date对象。然后你可以使用DateFormatter把它变成一个更好的字符串。

另请参阅:Date parse() method reference

编辑: Darn!我刚注意到parse()想要格式为Day Mon DD HH:MM:SS TZD YYYY

第二次编辑,假设您可以使用mx.controls.DateFormatter:

import mx.formatters.DateFormatter;
var fmt:DateFormatter = new DateFormatter()
fmt.formatString = "MMMM D, YYYY L:NN:SS A"; 
var prettyDate:String = fmt.format("2009-11-12 17:58:13");

答案 2 :(得分:1)

您可以使用date()函数在PHP端转换它。检查the documentation以了解您可以使用的格式规则。

这可能会让你得到你想要的东西:

date("F j, Y g:i:s a", $yourDateString)

示例:如果您运行:

echo date("F j, Y g:i:s a")

你得到:

November 13, 2009 1:45:19 am

答案 3 :(得分:0)

好的,不是在AS3或PHP级别更改它,而是如何在源头更改它?如果您可以控制SQL语句,则可以使用MySQL date_format()函数:

 select date_format(YOUR_DATE_COLUMN, "%M %d, %Y %l:%i:%s %p") from ...

不可否认,它正在将显示工具包的责任转移到另一个层,这样做可能会使SQL或PHP不再被其他客户端重用,但它也可以完成工作。在某些情况下,简单的方法是如何完成。

顺便说一句,这是我的测试查询及其输出:

select date_format(
              cast("2009-11-12 17:58:13" as datetime), 
              "%M %d, %Y %l:%i:%s %p") 
from dual;

输出:November 12, 2009 5:58:13 PM

另请参阅:MySQL date_format() function

答案 4 :(得分:0)

当使用AS3运行任何东西时,确实是你在任何时候都需要改进。与Armagosh提供的解决方案差不多。

要从AS3中的sql数据库解析完整格式化的Date字符串,只需toString()使用AS3的Date(sql_date)方法键入它。请注意,即使您不会被告知,Date(string)Date.parse(string)和字符串作为日期,所有工作方式都不同。修补我的朋友Tinker ......