as3 - 从mysql格式化时间戳字符串
我从php文件接收日期字段,并且需要格式化它。 我得到这个字符串:“2009-11-12 17时58分13秒” 我想对“二○○九年十一月一十二日下午五点58分13秒”as3 - 从mysql格式化时间戳字符串
我试图与Date类的工作转换,但我得到像这样的东西: 类型强制失败:无法将“2009-11-12 17:58:13”转换为日期。
任何人都知道这样做的任何好的工具?
如果没有简单的解决方案,你可以诉诸正则表达式:
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;
}
说明使用AS3运行时,任何正则表达式/(\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
*/
内置的Date
类有一个parse()
,应该能够将该字符串解析为一个真实的Date
对象。然后你可以使用DateFormatter
将它变成更好的字符串。
参见:Date parse() method reference
编辑:该死!我只注意到解析()想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");
+1使用解析方法,但DateFormatter仅限Flex。 – 2009-11-13 01:47:56
您可以使用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
谢谢,但我希望能在AS3中做到这一点。我从php中获得了一个很好的关联数组,并且如果可能的话,宁可不必进入那里并且混淆所有行数据。不过,我可能不得不诉诸于此。 – phil 2009-11-13 02:05:22
Ø凯,而不是改变它在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
肯定的是,在任何一个时间,你将不得不补锅匠。与Armagosh提供的解决方案不尽相同。
要从AS3中的sql数据库解析完整格式的日期字符串,您只需要使用toString()
键入AS3的Date(sql_date)
方法。请注意,即使您不会被告知,Date(string)
,Date.parse(string)
和字符串作为日期所有工作不同。修补匠我的朋友,修补程序...
我只限于纯动作?或者我们可以使用Flex API(mx。*)吗? – dustmachine 2009-11-13 02:08:07