![]() |
|
Как округлить дату по кратности? | ☑ | ||
---|---|---|---|---|
0
manking
16.11.15
✎
12:50
|
Добрый день.
Например В этой функции дата округляется с кратностью 1. То есть если ЕдиницаИзмерения час, то время 12:45 округлится до 12:00. Но как задать кратность, чтобы при кратности 2, время округлялось через 2 часа, 12:00 , 14:00 , 16:00. При кратности 3 12:00 , 15:00 , 18:00. &НаКлиенте Функция ОкруглитьДату(Дата , ЕдиницаИзмерения , Кратность) НоваяДата =Дата; Если ЕдиницаИзмерения= "Час" Тогда Час= Час(Дата); НоваяДата = НачалоДня(Дата)+ (((3600)*(Час))); ИначеЕсли ЕдиницаИзмерения= "День" Тогда День= День(Дата); НоваяДата = НачалоДня(Дата)+ (((86400)*(День))); КонецЕсли; // Кратность Возврат НоваяДата; КонецФункции |
|||
1
Горогуля
16.11.15
✎
12:51
|
это надо программировать
|
|||
2
1Сергей
16.11.15
✎
12:52
|
(1) самую малость
|
|||
3
Гёдза
16.11.15
✎
12:53
|
сначала научись число округлять до 3
|
|||
4
Гёдза
16.11.15
✎
12:53
|
т.е 13 нужно округлить до 15
|
|||
5
Ненавижу 1С
гуру
16.11.15
✎
12:54
|
непонятно:
1. округлять или брать целое? 2. Час= Час(Дата); (((3600)*(Час))) 3. не дату, а интервал времени 4. если часов 25, то функция вернет несколько иное в целом: Окр(Значение/Кратность)*Кратность или Цел(Значение/Кратность)*Кратность |
|||
6
Ненавижу 1С
гуру
16.11.15
✎
12:54
|
(4) почему не до 12?
|
|||
7
1Сергей
16.11.15
✎
12:54
|
(6) +1
|
|||
8
butterbean
16.11.15
✎
12:56
|
НачалоДня(Дата)+3600*Цел(Час(Дата)/Кратность)*Кратность
|
|||
9
Горогуля
16.11.15
✎
12:58
|
там ещё единица измерения. предлагаю запросом
|
|||
10
Фокусник
16.11.15
✎
12:59
|
(0) Определить количество секунд (например от начала дня), количество секунд разделить до нужного "кванта времени" - это значение округлить до целых, вернуть в секунды, вернуть в дату...
|
|||
11
DexterMorgan
16.11.15
✎
13:07
|
(9) пипец, уже дошли до того, что сервер даты округлять будет, делать ему нечего совсем, ога
|
|||
12
Ненавижу 1С
гуру
16.11.15
✎
13:08
|
(11) ну у меня округляет количество и суммы, ничего, не заржавел
|
|||
13
DexterMorgan
16.11.15
✎
13:08
|
(11) Причем нах сервер преприятия, сервер скл!
|
|||
14
Ненавижу 1С
гуру
16.11.15
✎
13:08
|
(13) именно он
|
|||
15
DexterMorgan
16.11.15
✎
13:08
|
(12) В рамках задачи ТОЛЬКО округления даты - это бред
|
|||
16
DexterMorgan
16.11.15
✎
13:09
|
(14) Красавчик
|
|||
17
Ненавижу 1С
гуру
16.11.15
✎
13:10
|
(15) на самом деле он округляет не даты, а интервалы времени, ближе всего тип TimeSpan в .NET
|
|||
18
DexterMorgan
16.11.15
✎
13:13
|
(17) да молодец, ч0, количество на цену перемножаешь тоже запросом? не из Челябинска? Больно суров ты
|
|||
19
Ненавижу 1С
гуру
16.11.15
✎
13:14
|
(18) а че в том такого, я еще на курсы валют умножаю и на кратности делю, так-то
|
|||
20
DexterMorgan
16.11.15
✎
13:14
|
(19) При обработке текущей строки тч? =)
|
|||
21
Ненавижу 1С
гуру
16.11.15
✎
13:16
|
(20) в основном в отчетах
|
|||
22
DexterMorgan
16.11.15
✎
13:17
|
(21) А че при изменении количества в строке тч так не делать? Ч0бынет?
|
|||
23
manking
16.11.15
✎
13:46
|
Сделал так. Вроде нормально работает.
Задача в том, чтобы дата липла к ближайшему интервалу в соответствии с кратностью, которую задает пользователь. Чтобы хранить даты в ассоциативном массиве в меньшем количестве. Если кратность 2 для часа, то на один день будет только 12 записей , если 3 то 7. &НаКлиенте Функция ОкруглитьДату(Дата , ЕдиницаИзмерения , Кратность) НоваяДата =Дата; Если ЕдиницаИзмерения= "Минута" Тогда НоваяДата= НачалоЧаса(Дата)+ ((Цел((Минута(Дата))/Кратность)*Кратность)*60); ИначеЕсли ЕдиницаИзмерения= "Час" Тогда НоваяДата= НачалоДня(Дата)+3600*Цел((Час(Дата))/Кратность)*Кратность; ИначеЕсли ЕдиницаИзмерения= "День" Тогда НоваяДата= НачалоМесяца(Дата)+ ((Цел((День(Дата))/Кратность)*Кратность)*86400); КонецЕсли; Возврат НоваяДата; КонецФункции Дата_= '20151116133000'; ЕдиницаИзмерения = "День"; НоваяДата=ОкруглитьДату(Дата_ , ЕдиницаИзмерения , 2); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |