FormsAPI. Поле для даты. В чём хранить?

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

Аватар пользователя smartchecker smartchecker 18 мая 2011 в 15:11

Как описать поле для хранения даты?

Первый вариант напрашивается такой.

    $schema['journal_of_requests'] = array(
        'fields' => array(
            'rid' => array(
                'description' => 'Request ID',
                'type' => 'serial',
                'unsigned' => true,
                'not null' => true,
            ),
            'request_date' => array(
                'description' => 'Date of request',
                'type' => 'datetime',
                'not null' => true,
            ),

Для ввода хочу использовать что-то типа или какой-нибудь каледнарь.

    $form['bla-bla'] = array(
        '#title' => t('Request date'),
        '#type' => 'date',
        '#description' => t('Set date of request'),
        '#default_value' => array(
            'month' => format_date(time(), 'custom', 'n'),
            'day' => format_date(time(), 'custom', 'j'),
            'year' => format_date(time(), 'custom', 'Y')
        )
    );

Как потом правильно запихать дату в поле datetime?
И вообще как правильно с датами работать, если мне нужно по ним выборку производить?

Комментарии

Аватар пользователя alexxrin alexxrin 18 мая 2011 в 15:18

Так как в друпале дата всегда храниться unix-меткой, то я тоже предпочитаю хранить ее именно так, то есть целым числом, чтобы не нарушить общей конструкции и не путаться с тем, что данные везде в разном виде.

Аватар пользователя alexxrin alexxrin 18 мая 2011 в 15:27

"RxB" wrote:
тот же модуль Date по разному хранит

Как Date бы не хранил, какая вам разница? С меткой все равно работать проще и быстрее (на мой взгляд), она замечательно сортируется, индексируется, если надо, и выводится в любом виде.

Аватар пользователя smartchecker smartchecker 18 мая 2011 в 15:27

Дык, как правильнее?
1. Как поле описать в схеме?
2. Как запрашивать у пользователя
3. Как запихивать в базу то, что спросили у пользователя?

Аватар пользователя alexxrin alexxrin 18 мая 2011 в 15:31

В схеме:
'type' => 'integer'

Как запрашивать: найдите какой-нибудь яваскриптовый виджет с календарем.

Общее для работы:
Я бы конечно описал своими словами, но боюсь, что это будем много, сумбурно и непонятно, поэтому:

http://php.net/manual/ru/function.time.php
http://php.net/manual/en/function.date.php

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 18 мая 2011 в 15:32

"alexxrin" wrote:
Как Date бы не хранил, какая вам разница? С меткой все равно работать проще и быстрее (на мой взгляд), она замечательно сортируется, индексируется, если надо, и выводится в любом виде.

Я не спорю, сам храню в инте.
"smartchecker" wrote:

1. Как поле описать в схеме?

int
"smartchecker" wrote:

2. Как запрашивать у пользователя

Любым удобным способом
"smartchecker" wrote:

3. Как запихивать в базу то, что спросили у пользователя?

db_query()
db_write_record()

Аватар пользователя alexxrin alexxrin 18 мая 2011 в 16:12

"smartchecker" wrote:
Если поле в int'е как тогда сортировать при выборке из базы?

Время это количество секунд с 1970 года, следовательно завтра пройдет больше секунд, чем прошло сейчас... Еще вопросы?