as3 - форматирование строки метки времени из mysql - PullRequest
1 голос
/ 13 ноября 2009

Я получаю поле даты из файла php, и мне нужно отформатировать его. Я получаю эту строку: "2009-11-12 17:58:13" Я хочу преобразовать в «12 ноября 2009 5:58:13 вечера»

Я пытался работать с классом Date, но получаю такие вещи: Ошибка приведения типа: невозможно преобразовать «2009-11-12 17:58:13» в Date.

Кто-нибудь знает какие-нибудь хорошие утилиты для этого?

Ответы [ 5 ]

4 голосов
/ 13 ноября 2009

Если не существует простого решения, вы можете прибегнуть к регулярному выражению:

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
     */
3 голосов
/ 13 ноября 2009

Встроенный класс Date имеет parse(), который должен иметь возможность анализировать эту строку в реальном Date объекте. Тогда вы можете использовать DateFormatter, чтобы превратить его в более приятную строку.

См. Также: Справочник по методу parse ()

РЕДАКТИРОВАТЬ: Черт! Я только что заметил, что 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");
1 голос
/ 13 ноября 2009

Вы можете использовать функцию date (), чтобы преобразовать ее на стороне PHP. Проверьте документацию для правил форматирования, которые вы можете использовать.

Это может дать вам то, что вы хотите:

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 голосов
/ 17 июня 2013

Конечно, при использовании AS3 для запуска чего-либо, вы в любой момент должны были бы попробовать. Хотя и не так, как решение, предложенное Армагошем.

Для анализа полностью отформатированных строк Date из базы данных sql в AS3 все, что вам нужно сделать, - это toString(), наберите его методом Date(sql_date) AS3. Обратите внимание, что даже если вам не сообщат, Date(string), Date.parse(string) и строка как дата все работают по-разному. Тинкер, мой друг, Тинкер ...

0 голосов
/ 13 ноября 2009

Хорошо, вместо того, чтобы изменить его на уровне 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 ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...