as3 - mysql bir zaman damgası dize biçimlendirmek

5 Cevap php

I'm receiving a date field from a php file, and I need to format it. I get this string: "2009-11-12 17:58:13" I want to convert to "November 12, 2009 5:58:13 pm"

I tried to work with the Date class, but I get stuff like this: Type Coercion failed: cannot convert "2009-11-12 17:58:13" to Date.

Herkes bunu yapmak için herhangi bir iyi araçlardan biliyor musun?

5 Cevap

Hiç kolay bir çözüm varsa, size regex için çare olabilir:

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

Regex açıklaması /(\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
     */

Yerleşik Date class olan bir parse() gerçek bir Date nesne içine bu dizeyi ayrıştırmak gerekir. Sonra güzel bir dizeye dönüştürmek için DateFormatter kullanabilirsiniz.

Ayrıca bakınız: Date parse() method reference

EDIT: Darn! Ben sadece parse () Day Mon DD HH:MM:SS TZD YYYY bir biçim istiyor fark

İKİNCİ DÜZENLEME, kullanabilirsiniz varsayarak 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");

Sen PHP tarafında dönüştürmek için date () işlevini kullanabilirsiniz. Eğer kullanabileceğiniz biçimlendirme kuralları için the documentation edin.

Bu ne istediğinizi alabilirsiniz:

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

Örnek: Eğer çalıştırırsanız:

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

olsun:

November 13, 2009 1:45:19 am

Tamam, yerine AS3 veya PHP seviyede değişen, nasıl kaynakta değiştirme hakkında? : Eğer SQL deyiminin kontrol varsa, MySQL date_format() fonksiyonu kullanabilirsiniz

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

Kuşkusuz bu, farklı bir katmana uzağa aşağı ekran araç bir sorumluluk hareket ediyor, ve bunu yaparken SQL veya PHP diğer müşteriler tarafından daha az yeniden yapmak olabilir, ama aynı zamanda işi alır. Ve bazı durumlarda kolay yolu yapılmalı nasıl.

btw, burada benim test sorgu ve ondan çıkışı bulunuyor:

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

Çıktı: November 12, 2009 5:58:13 PM

Ayrıca bakınız: MySQL date_format() function

Tabii bir şey çalıştırmak için AS3 kullanırken herhangi bir anda tamircilik LAZIM olmasıdır. O kadar çok olsa Armagosh tarafından sunulan çözüm olarak yani.

AS3 bir sql veritabanından tam biçimlendirilmiş tarihi dizeleri ayrıştırmak için, toString() AS3 Date(sql_date) yöntemi ile yazın yapmanız gereken tek şey. Size söyledim olmayacak olsa bile, Date(string), Date.parse(string) ve Tarih gibi dize tüm çalışmaları farklı unutmayınız. Arkadaşım, Tinker tamircilik ...