Сдвиг даты в прошлое
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- ✯ Ветеран ✯
- Сообщения: 5025
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 22 раза
Сдвиг даты в прошлое
Нужно вычислять дату сколько-то месяцев назад. Чтобы не изобретать велосипед, не поделится кто-нибудь красивой функцией? На Firebird'е это занимает одну строчку, но сервак дёргать не хочется.
We are hard at work… for you.
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
Сдвиг даты в прошлое
Можно начать с такой формулы:
Код: Выделить всё
thatdate = date(day(thisdate), month(thisdate) - x, year(thisdate))
С уважением, ДП
- Admin
- Администратор
- Сообщения: 3963
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 29 раз
- Поблагодарили: 22 раза
- Контактная информация:
Сдвиг даты в прошлое
Ага, попался!
thatdate = date(day(thisdate), month(thisdate) - x, year(thisdate))
thatdate = date(day(thisdate), month(thisdate) - x, year(thisdate))
Код: Выделить всё
thatdate = date(month(thisdate) - x, day(thisdate), year(thisdate))
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
Сдвиг даты в прошлое
Всё время забываю, что тут совершенно идиотская последовательность аргументов.
С уважением, ДП
- Admin
- Администратор
- Сообщения: 3963
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 29 раз
- Поблагодарили: 22 раза
- Контактная информация:
Сдвиг даты в прошлое
Есть такое.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
-
- ✯ Ветеран ✯
- Сообщения: 5025
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 22 раза
Сдвиг даты в прошлое
К сожалению SV не предусмотрело отрицательные значения месяца и даты. Хотя могли бы. Поэтому и возник вопрос. Может у кого-то работает
?
Код: Выделить всё
thatdate = date(-5, 1, 2018)
We are hard at work… for you.
- Admin
- Администратор
- Сообщения: 3963
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 29 раз
- Поблагодарили: 22 раза
- Контактная информация:
Сдвиг даты в прошлое
И что должно получиться?
-5 от какого месяца?
Если от текущего то зачем год и день?
А как +5 задать?
Напишите уже свой класс/функцию для работы с датами.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
Сдвиг даты в прошлое
Может быть дату несколько месяцев назад от ТЕКУЩЕЙ ?
Тогда: date(Month(Today()) - 5, Day(Today()), Year(Day(Today())))
За теми кто отстал - не возвращаться. (С) Кодекс
-
- ✯ Ветеран ✯
- Сообщения: 5025
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 22 раза
Сдвиг даты в прошлое
А что получается при этом:
Код: Выделить всё
date(15, 1, 2017)
Хочу, чтобы и отрицательные числа отрабатывались.
Пишу свою функцию.
Firebird не парится по этому поводу, к примеру.
We are hard at work… for you.
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
Сдвиг даты в прошлое
The month and day parameters do allow positive out-of-range values
С уважением, ДП
- Admin
- Администратор
- Сообщения: 3963
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 29 раз
- Поблагодарили: 22 раза
- Контактная информация:
Сдвиг даты в прошлое
Вот на скорую руку
Код: Выделить всё
PROGRAM
TDateAdd ITEMIZE,PRE(DateAdd)
YEAR EQUATE
MONTH EQUATE
DAY EQUATE
!HOUR EQUATE
!MINUTE EQUATE
!SECOND EQUATE
!MILLISECOND EQUATE
END
TDate GROUP,TYPE
Day LONG
Month LONG
Year LONG
END
MAP
DateAdd(BYTE DatePart, LONG Number, <LONG Date>), LONG
END
CODE
MESSAGE(FORMAT(DateAdd(DateAdd:YEAR,1),@D06b))
MESSAGE(FORMAT(DateAdd(DateAdd:MONTH,-42),@D06b))
MESSAGE(FORMAT(DateAdd(DateAdd:DAY,+90),@D06b))
MESSAGE(FORMAT(DateAdd(DateAdd:MONTH,1,DATE(1,30,2017)),@D06b))
DateAdd PROCEDURE(BYTE DatePart, LONG Number, <LONG Date>)!, LONG
Result LONG
InDate GROUP(TDate).
CODE
IF OMITTED(3)
Result = TODAY()
ELSE
Result = Date
END
InDate.Day = DAY(Result)
InDate.Month = MONTH(Result)
InDate.Year = YEAR(Result)
CASE DatePart
OF DateAdd:YEAR
Result = DATE(InDate.Month,InDate.Day,InDate.Year+Number)
OF DateAdd:MONTH
Off# = ABS(Number)%12
IF Number > 0
InDate.Month += Off#
InDate.Year += ROUND(ABS(Number)/12,1)
ELSE
InDate.Month += -Off#
InDate.Year += -ROUND(ABS(Number)/12,1)
END
Result = DATE(InDate.Month,InDate.Day,InDate.Year)
OF DateAdd:DAY
Result += Number
END
RETURN Result
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Admin
- Администратор
- Сообщения: 3963
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 29 раз
- Поблагодарили: 22 раза
- Контактная информация:
Сдвиг даты в прошлое
Ток забыл при смене месяца число сдвинуть!
Или не нужно. Непонятно что в этом случае делать, когда 30 февраля типа. Сдвигать вперед на разницу дней?
Или не нужно. Непонятно что в этом случае делать, когда 30 февраля типа. Сдвигать вперед на разницу дней?
Код: Выделить всё
MESSAGE(FORMAT(DateAdd(DateAdd:MONTH,1,DATE(1,30,2017)),@D06b))
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Admin
- Администратор
- Сообщения: 3963
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 29 раз
- Поблагодарили: 22 раза
- Контактная информация:
Сдвиг даты в прошлое
Хехе. Кларион сам вернул 2 марта в таком случае
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
- Admin
- Администратор
- Сообщения: 3963
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 29 раз
- Поблагодарили: 22 раза
- Контактная информация:
Сдвиг даты в прошлое
Ну исправить недолго если нужно.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса