Как вы храните повторяющиеся периоды времени в базе данных? Как «с первого января по последний день мая»? - PullRequest
3 голосов
/ 14 февраля 2012

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

Я использую Ruby on Rails с SQL.

Ответы [ 3 ]

7 голосов
/ 14 февраля 2012

Чтобы хранить повторяющиеся даты произвольной сложности, вы хотите посмотреть на временные выражения.

Доступны некоторые драгоценные камни: runt , TExp или icecube

Я использовал и runt, и icecube, а также сохранял повторяющиеся даты (еженедельные расписания) в сериализованных объектах ruby.Драгоценные камни являются наиболее гибкими, если их немного сложно использовать, когда ваш вариант использования прост.

Также, если вам нужно проанализировать текстовые выражения, посмотрите на Chronic

1 голос
/ 14 февраля 2012

В ruby, вы, вероятно, могли бы выразить это красиво (для определенного года) с помощью Range:

(Time.utc(2012, 1, 1)..Time.utc(2012, 5, 1).end_of_month)

Но, сохраняя это в базе данных ... можно думать только о том, что вы сказали (столбцы)для начала / конца дня и месяца), а затем добавьте методы-обертки в модель, подобную этой:

def current_start
  Time.utc(current_year, start_month, start_day)
end

...

def current_range
  (current_start..current_end)
end
0 голосов
/ 14 февраля 2012

Я бы просто использовал две даты ... afaik, которые в любом случае хорошо отображаются на объекты Ruby Date, с которыми вы можете выполнять обычную арифметику.

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