Представление повторяющихся дат

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

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

10.12.2008 21:17:23
2 ОТВЕТА

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

  1. Всегда перед выходными
  2. Всегда после выходных
  3. Если это суббота, пятница, и если это воскресенье, понедельник
1
10.12.2008 21:40:55
хмм. хорошая точка зрения. возможно, добавьте еще одну букву в DOW: «p» означает предыдущий бизнес-день?
alumb 10.12.2008 21:43:21
B до выходных. А после выходных. S для раскола?
Jim Barrows 10.12.2008 22:05:21
С взята на субботу.
alumb 10.12.2008 22:09:55
РЕШЕНИЕ

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

YYYY/MM/DD+YY/MM/DD+DOW
  • все блоки (разделенные +) являются необязательными, а также все части каждого блока.
  • первый блок обозначает дату начала
    • если пусто - обозначает сегодня
    • если отсутствует часть - обозначает все ... т.е. "// 12" будет обозначать 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 /"
0
11.11.2009 00:30:57