Представление повторяющихся дат - PullRequest
6 голосов
/ 11 декабря 2008

повторяющиеся даты:

Циклы выставления счетов представлены в разных форматах, например: «первое число месяца», «третья пятница месяца» или «первый день недели в или после 21-го дня после 13-го числа месяца» (спасибо визы!). Моя цель - представить эти разные циклы выставления счетов в одном легко разбираемом текстовом поле базы данных.

Ответы [ 2 ]

1 голос
/ 11 декабря 2008

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

  1. Всегда перед выходными
  2. Всегда после выходных
  3. Если суббота, пятница, а если воскресенье, понедельник
0 голосов
/ 11 ноября 2009

Текущее решение:

YYYY/MM/DD+YY/MM/DD+DOW
  • все блоки (ограниченные +) являются необязательными, а также все части каждого блока.
  • первый блок обозначает дату начала
    • если пусто - обозначает сегодня
    • если пропущена часть - обозначает все ... т.е. "// 12" будет обозначать двенадцатое число каждого месяца.
    • минус обозначает отсчет с конца периода .. т.е. "// - 1" обозначает последний день месяца
    • переполнения переносятся в следующий месяц, т. Е. "// 40" будет через 40 дней после первого месяца
  • второй блок обозначает изменение даты между повторениями
    • если пусто - установить дату (с первого блока)
    • Добавить существующие порции - т.е. "/ 1 /" означает каждый месяц после указанной даты начала
  • третий блок обозначает день недели, в который рассчитанная дата должна быть перемещена
    • доступны [m,t,w,r,f,s,d,b] (7 дней недели, «рабочий день»)

Расчет:

  • Расчет начинается с даты, указанной в первом блоке, заполняя недостающие части датой добавления записи.
  • Затем добавляется DOW, чтобы получить действительную дату начала. Это первая дата мероприятия.
  • следующая дата рассчитывается путем добавления второго блока к последнему вычисленному первому блоку и добавления DOW для получения следующей даты.

Примеры:

  • 12 марта 2008 г. - «2008/3/12»
  • первое число каждого месяца - "// 1 + / 1 /"
  • третья пятница месяца каждого месяца - "// 21 + / 1 / + f"
  • первый день недели в или после 21-го числа после 13-го числа месяца - "// 34 + / 1 / + b"
  • каждые 2 недели с сегодняшнего дня - "+ // 14"
  • последний день каждого второго месяца, начиная с марта - "/ 3 / -1 + / 2 /"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...