![]() |
|
Как из даты вычесть Год/Месяц/Дни | ☑ | ||
---|---|---|---|---|
0
Asdef
26.10.09
✎
07:03
|
Товарищи, поскажите примерный алоритм сабжа.
Пример: 26.10.2009 вычесть 1 г. 8 м. 15 д. равно= 12.02.2008 Нужно реализовать на 1С или VBA в Excel ) |
|||
1
shadow_sw
26.10.09
✎
07:04
|
берешь дату от которой надо отнять, потом 86400*кол-во отнимаемых дней=нужная дата
|
|||
2
shadow_sw
26.10.09
✎
07:04
|
(1) это про 1с
|
|||
3
skunk
26.10.09
✎
07:07
|
считаешь количество месяцев ... отнимаешь штатное функцией месяца... и далее отнимаешь количество оставшихся дней умноженное 86400
|
|||
4
Stim
26.10.09
✎
07:10
|
(0)посмотри в типовой Бухии расчет фактического срока использования ОС. Просветлись:)
|
|||
5
Asdef
26.10.09
✎
07:13
|
(1) (3) сорри, но не совсем понял, можно чуток поподробнее ?
и чего делать с февралем, у него ж и 28 и 29 дней может быть |
|||
6
Asdef
26.10.09
✎
07:13
|
(4) а куда конкретно лезть? название процедуры?
|
|||
7
Stim
26.10.09
✎
07:16
|
(6) нету под рукой компа, я с телефона сижу. Ищи через форму элемента справочника ОС на закладке Амортизация
|
|||
8
Rie
26.10.09
✎
07:18
|
(5) ДобавитьМесяц учитывает эти нюансы.
|
|||
9
Кураж
26.10.09
✎
07:18
|
Налетели дятлы )
Гуру делают через "ВЫБРАТЬ РАЗНОСТЬДАТ(&Дата2,&Дата1,ДЕНЬ)" |
|||
10
Asdef
26.10.09
✎
07:19
|
(7) не нашел ничего...
|
|||
11
Asdef
26.10.09
✎
07:20
|
короче, народ, код на икселе такой:
temp = Cells(2, 2) td = CDate(temp) vich = Cells(3, 2) s = 0 tv = Mid(vich, 1, 2) s = s + (Val(tv) * 365) tv = Mid(vich, 4, 2) s = s + (Val(tv) * 30) tv = Mid(vich, 7, 2) s = s + Val(tv) temp1 = td - s Cells(4, 2) = Format(temp1, "dd.mm.yyyy") поправьте плиз, а то в итоге выводит 14.02.2008 |
|||
12
Asdef
26.10.09
✎
07:22
|
(9) на моем примере как код писать та юзая эту функцию?
|
|||
13
reg-aleks
26.10.09
✎
07:22
|
нафиг год... Вычти функцией:
ПолеченнаяДАта = ДобавитьМесяц(ТвояДАта,-12); - вычтет 12 месяцев из твоей даты.. затем из полученного вычти дни: ПолеченнаяДата = ПолеченнаяДАта - 60*24*24 * КоличествоДней! |
|||
14
Rie
26.10.09
✎
07:24
|
(13) только 60*60*24
|
|||
15
Asdef
26.10.09
✎
07:25
|
(13)(14) 60*24(60)*24 - это что?
куда ваще 1 г. 8 м. 15 д. пихать то? |
|||
16
reg-aleks
26.10.09
✎
07:25
|
(14) только 60*60*24 вычтет 1 день... а умножив на количество дней можно минусовать несколько дней
|
|||
17
reg-aleks
26.10.09
✎
07:25
|
(14) упс. :) невнимательно :)))) да.. 60*60*24
|
|||
18
Rie
26.10.09
✎
07:26
|
(11) В месяце не обязательно 30 дней, как было верно замечено ранее.
Почему ты не хочешь работать со значениями типа Date? |
|||
19
Невский Александр
26.10.09
✎
07:27
|
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&Дата,ДЕНЬ), ГОД, &Г), МЕСЯЦ, &М), ДЕНЬ, &Д) КАК РассчитаннаяДата |
|||
20
Asdef
26.10.09
✎
07:28
|
(18) в 1С ?
|
|||
21
reg-aleks
26.10.09
✎
07:28
|
1 г. 8 м. 15 д.
КоличествоЛет = 1; КоличествоМЕсяцев = 8; КоличествоДней=15; ТекущаяДата = ДобавитьМесяц(ТЕкущаяДата,(-1)*КоличествоЛет*12+КоличествоМесяцев); ТекущаяДата = ТекущаяДата-60*60*24*КоличествоДней |
|||
22
Rie
26.10.09
✎
07:29
|
(20) В 1С есть ДобавитьМесяц.
В VBA есть DateAdd. Выбирай, что больше нравится. |
|||
23
Rie
26.10.09
✎
07:30
|
+(22) А значения типа Date - они и в 1С есть.
|
|||
24
reg-aleks
26.10.09
✎
07:33
|
Скобки забыл!
ТекущаяДата = ДобавитьМесяц(ТЕкущаяДата,(-1)*(КоличествоЛет*12+КоличествоМесяцев)); |
|||
25
Asdef
26.10.09
✎
07:35
|
(24) {Форма.Форма(8)}: Преобразование значения к типу Дата не может быть выполнено
ТекущаяДата = ДобавитьМесяц(ТЕкущаяДата,(-1)*(КоличествоЛет*12+КоличествоМесяцев)); |
|||
26
Asdef
26.10.09
✎
07:36
|
(23) а в икселе где месяц добавлять?
|
|||
27
Rie
26.10.09
✎
07:36
|
(26) Там в параметрах DateAdd указывается, что добавляется - месяц, квартал и т.д.
|
|||
28
Asdef
26.10.09
✎
07:37
|
(27) а, попробую )
|
|||
29
Rie
26.10.09
✎
07:37
|
(25) ТекущаяДата - какое значение имела? Если строка - соответствовала ли представлению даты в 1С? Если нет - преобразуй.
|
|||
30
Asdef
26.10.09
✎
07:37
|
осталося с 1С разобраться
|
|||
31
reg-aleks
26.10.09
✎
07:37
|
(25) КоличествоЛет и КоличествоМесяцев у тебя Числовые??
ПОпробуй переименовать переменные. ДатаКоторуюНадоПолучить = ДобавитьМесяц(ИсходнаяДата,(-1)*(КоличествоЛет*12+КоличествоМесяцев)); |
|||
32
Asdef
26.10.09
✎
07:39
|
(31) так, добавил, все пашет, но итог не верный: 11.02.2008 0:00:00
|
|||
33
Asdef
26.10.09
✎
07:40
|
... или верный, ваще-та я за основу брал данные другой программы
или же тут все дело в часах... |
|||
34
reg-aleks
26.10.09
✎
07:41
|
(33) насколько разница?
|
|||
35
reg-aleks
26.10.09
✎
07:42
|
ИсходнаяДата = ИсходнаяДата-60*60*24*КоличествоДней
|
|||
36
reg-aleks
26.10.09
✎
07:43
|
т.е. ДатаКоторуюНадоПолучить = ДатаКоторуюНадоПолучить-60*60*24*КоличествоДней
p.s. Блин...пообедал и ваще засыпаю и невнимательный)) |
|||
37
Asdef
26.10.09
✎
07:43
|
(35) ладно, спасибо ;)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |