Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как проверить вхождение даты в интервал?
|
|||
|---|---|---|---|
|
#18+
Вот чем мне "нравится" Cache, с любой фигней можно возиться бесконечно долго... Не могу понять как проверить вхождение даты в интервал? Перепробовал кучу вариантов, с "between", "convert", "cast", "to_date" и т.д. и т.п. Сейчас остановился на таком: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Проверяю так: d testInt^debug("2011-12-17","2011-12-25") Сегодня 2011-12-17 00:00:00 Минимум 2011-12-18 00:00:00 Максимум 2012-01-01 00:00:00 Входит в интервал Почему? Видимо сравниваются "как строки" все-таки? Хотя логика сравнения строк в Cache для меня тоже загадка: w ("2011-12-17 00:00:00" >= "2011-12-18 00:00:00") 1 w ("2011-12-17 00:00:00" <= "2011-12-18 00:00:00") 1 Но это отдельный вопрос. Сейчас мне бы понять, как с датами тут работа организована? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2012, 17:43 |
|
||
|
Как проверить вхождение даты в интервал?
|
|||
|---|---|---|---|
|
#18+
Чет я вас не очень понимаю пока. Даты это числа и как числа сравниваются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2012, 18:01 |
|
||
|
Как проверить вхождение даты в интервал?
|
|||
|---|---|---|---|
|
#18+
coder1cv8 , Строки не сравниваются операторами больше/меньше. В вашем примере при использовании операторов <= и >= строки приводятся к числам, а они равны (2011). Используйте строковые операторы . Блок А.Н.Даты это числа и как числа сравниваются. $SYSTEM.SQL.DATEADD() возвращает TIMESTAMP, а это всего лишь строка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2012, 18:11 |
|
||
|
Как проверить вхождение даты в интервал?
|
|||
|---|---|---|---|
|
#18+
coder1cv8Вот чем мне "нравится" Cache, с любой фигней можно возиться бесконечно долго... Data Formats and Translation Methods Представление одной и той же даты в разных форматах: Logical[Storage]: 62487 Display: 31.01.2012 (зависит от настроек Вашей локали) ODBC: 2012-01-31 coder1cv8Перепробовал кучу вариантов, с "between", "convert", "cast", "to_date" и т.д. и т.п.Похоже на SQL, поэтому и пример привожу для SQL: Class del.d Extends %Persistent { Property birthday As %Date; ClassMethod Test() { d ..%KillExtent() &sql(insert into del.d(birthday) values({d '2012-01-29'})) &sql(select count(*) into :r from del.d where current_date between birthday-7 and birthday+7) #; current_date between birthday-7 and birthday+7 => 62487 between 62485-7 and 62485+7 w r,! ; Результат при текущей дате "31.01.2012" = 1 } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2012, 19:24 |
|
||
|
Как проверить вхождение даты в интервал?
|
|||
|---|---|---|---|
|
#18+
coder1cv8, Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2012, 19:53 |
|
||
|
Как проверить вхождение даты в интервал?
|
|||
|---|---|---|---|
|
#18+
Ага! Значит все эти %Date, %TimeStamp-ы это просто строки и чтобы сравнить их как даты, нужно привести их к формату хоролога, используя $zdh видимо, то есть мой пример должен выглядеть так: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 09:54 |
|
||
|
Как проверить вхождение даты в интервал?
|
|||
|---|---|---|---|
|
#18+
doublefint , спасибо за готовое решение! ) Оригинальный ход! А такое "сравнение строками" для всех случаев корректно работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 09:57 |
|
||
|
Как проверить вхождение даты в интервал?
|
|||
|---|---|---|---|
|
#18+
coder1cv8Ага! Значит все эти %Date, %TimeStamp-ы это просто строки и чтобы сравнить их как даты, нужно привести их к формату хоролога, используя $zdh видимоЕсли Вы работаете только с датой без времени, то можно поступить проще: testInt(today,birthday) public { s tDate = $zdh(today,3) s minDate = $zdh(birthday,3)-7 s maxDate = $zdh(birthday,3)+7 w !,"Сегодня "_$zd(tDate,3) w !,"Минимум "_$zd(minDate,3) w !,"Максимум "_$zd(maxDate,3) if (tDate >= minDate) && (tDate <= maxDate) { w !,"Входит в интервал" } else { w !,"НЕ входит в интервал" } } Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 11:22 |
|
||
|
Как проверить вхождение даты в интервал?
|
|||
|---|---|---|---|
|
#18+
servit , согласен, верное замечание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 11:25 |
|
||
|
Как проверить вхождение даты в интервал?
|
|||
|---|---|---|---|
|
#18+
coder1cv8, насчет всех случаев не знаю, мои тесты проходит, документации соответствует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 12:40 |
|
||
|
Как проверить вхождение даты в интервал?
|
|||
|---|---|---|---|
|
#18+
coder1cv8Ага! Значит все эти %Date, %TimeStamp-ы это просто строки и чтобы сравнить их как даты, нужно привести их к формату хоролога %TimeStamp - строка, приведете к внутреннему формату - получите строку вида 62488,41965.31368 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 12:52 |
|
||
|
|

start [/forum/topic.php?fid=39&gotonew=1&tid=1557549]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
40ms |
get topic data: |
8ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 361ms |

| 0 / 0 |
