Forms API. timestamp из базы пропихнуть на форму. Как?

Главные вкладки

Аватар пользователя smartchecker smartchecker 9 декабря 2011 в 13:21

Есть в базе поле в виде timestamp (2011-08-03 17:11:38.288978).
Нужно его выпихнуть на форму через forms api.
Естественно такой кусок работает не так как мне надо.

        $form['request_date'] = array(
            '#title' => t('Дата Заявки'),
            '#type' => 'date',
            '#description' => t('Задайте дату заявки'),
            '#default_value' => array(
                'year' => $request ? format_date($request->request_date,'custom', 'Y') : format_date(time(), 'custom', 'Y'),
                'month' => $request ? format_date($request->request_date,'custom', 'n') : format_date(time(), 'custom', 'n'),
                'day' => $request ? format_date($request->request_date,'custom', 'j') : format_date(time(), 'custom', 'j'),
            )
        );

На форму можно выложить как '#type' => 'date', так и '#type' => 'date_popup'.
Основная задача установить в этот контрол дату из базы.

Комментарии

Аватар пользователя smartchecker smartchecker 9 декабря 2011 в 14:44

Это я просто так вывел

 drupal_set_message(t($request->request_date));

В базе оно

drupal6=
                                         Table "public.journal_of_requests"
      Column       |            Type             |                             Modifiers
-------------------+-----------------------------+-------------------------------------------------------------------
 request_date      | timestamp without time zone | not null default now()

Или так

+-------------------+------------------+------+-----+-------------------+----------------+
| Field             | Type             | Null | Key | Default           | Extra          |
+-------------------+------------------+------+-----+-------------------+----------------+
| request_date      | timestamp        | NO   |     | CURRENT_TIMESTAMP |                |
Аватар пользователя smartchecker smartchecker 9 декабря 2011 в 17:44

Только это даёт какой-то вменяемый результат

drupal_set_message('<pre>asd: '. print_r(date_parse_from_format('Y-m-d HH:ii:ss.u', $request->request_date), 1).'</pre>', status);
Array
(
    [year] => 2011
    [month] => 8
    [day] => 3
    [hour] => 11
    [minute] => 28
    [second] => 78
    [fraction] =>
    [warning_count] => 1
    [warnings] => Array
        (
            [26] => The parsed time was invalid
        )

    [error_count] => 4
    [errors] => Array
        (
            [13] => Unexpected data found.
            [19] => Unexpected data found.
            [22] => The separation symbol could not be found
            [26] => Data missing
        )

    [is_localtime] =>
)

Аватар пользователя smartchecker smartchecker 9 декабря 2011 в 17:59

Допустим, одну проблему я решил так.

        $request_date = date_parse_from_format('Y-m-d HH:ii:ss.u', $request->request_date);
        $form['request_date'] = array(
            '#title' => t('Дата Заявки'),
            '#type' => 'date',
            '#description' => t('Задайте дату заявки'),
            '#default_value' => array(
                'year' => $request ? $request_date[year] : format_date(time(), 'custom', 'Y'),
                'month' => $request ? $request_date[month] : format_date(time(), 'custom', 'n'),
                'day' => $request ? $request_date[day] : format_date(time(), 'custom', 'j'),
            )
        );

Как теперь из того что будет изменено через контрол на форме сформировать timestamp, который можно будет запихать в базу?

Аватар пользователя divined divined 12 декабря 2011 в 13:20

У вас вообще не используется timestamp,
вы же сами показали вывод из запроса что у вас значение хранится в обычном формате date!

По идеи вам ничего менять не надо, Этот контрол должен так же в формате date запихать инфу в базу.

Если бы у вас был timestamp то вместо 2011-12-09 09:13:43 было бы 1323422023.