2009-11-13 67 views
1

我從php文件接收日期字段,並且需要格式化它。 我得到這個字符串:「2009-11-12 17時58分13秒」 我想對「二○○九年十一月一十二日下午五點58分13秒」as3 - 從mysql格式化時間戳字符串

我試圖與Date類的工作轉換,但我得到像這樣的東西: 類型強制失敗:無法將「2009-11-12 17:58:13」轉換爲日期。

任何人都知道這樣做的任何好的工具?

+0

我只限於純動作?或者我們可以使用Flex API(mx。*)嗎? – dustmachine 2009-11-13 02:08:07

回答

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

說明使用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 
    */ 
+0

對於我來說,閱讀正則表達式就像閱讀日文,但這正是我想要的,而且效果很好。 – phil 2009-11-13 18:21:44

+0

這是一個簡單的正則表達式 - 我添加了一個解釋。順便說一句,http://www.regular-expressions.info/tutorial.html是開始學習日語的好地方:) – Amarghosh 2009-11-15 05:34:22

3

內置的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"); 
+0

+1使用解析方法,但DateFormatter僅限Flex。 – 2009-11-13 01:47:56

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

+0

謝謝,但我希望能在AS3中做到這一點。我從php中獲得了一個很好的關聯數組,並且如果可能的話,寧可不必進入那裏並且混淆所有行數據。不過,我可能不得不訴諸於此。 – phil 2009-11-13 02:05:22

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

0

肯定的是,在任何一個時間,你將不得不補鍋匠。與Armagosh提供的解決方案不盡相同。

要從AS3中的sql數據庫解析完整格式的日期字符串,您只需要使用toString()鍵入AS3的Date(sql_date)方法。請注意,即使您不會被告知,Date(string),Date.parse(string)和字符串作爲日期所有工作不同。修補匠我的朋友,修補程序...