Topic: Количество дней между двумя датами
Добрый день! Есть две записи дат, дата поступления в стационар и дата выписки из стационара. Подскажите пожалуйста, как подсчитать количество дней между датой поступления и датой выписки.
My Visual Database → Russian → Количество дней между двумя датами
Добрый день! Есть две записи дат, дата поступления в стационар и дата выписки из стационара. Подскажите пожалуйста, как подсчитать количество дней между датой поступления и датой выписки.
Пример на DateTimePicker.
procedure Form1_Button1_OnClick (Sender: string; Action: string);
var
YY,MM,DD,YY2,MM2,DD2: integer;
begin
DecodeDate(Form1.DateTimePicker1.Date, YY, MM, DD);
DecodeDate(Form1.DateTimePicker2.Date, YY2, MM2, DD2);
Form1.Label1.Caption := IntToStr(DD2-DD);
end;
Допустим, мне надо подсчитать кол-во дней с 01.09.2017 по 07.10.2017, ваш пример выдает 6 дней, а фактически должно быть 37.
В чём загвоздка?
Hello sign2
You could try this ::
procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var dt: TDateTime;
begin
dt := Form1.DateTimePicker2.DateTime - Form1.DateTimePicker1.DateTime;
ShowMessage(IntToStr(Trunc(dt)) + ' days');
end;
JB
Спасибо JB
Привет, Sign2
Возможно, это также так
Derek.
Hello Derek, sign2
You're right, Derek
It is the eternal history of intervals.
If sign2 wants to go from the Monday to the following Monday included, he can add into my proposal :
ShowMessage(IntToStr(Trunc(dt)+1) + ' days');
The two ways are OK.
HAve a good day
JB
Спасибо всем!
Hmm... how many days between the same date? 0 or 1 ? I'm confused )))
Hello Mcsimm
I did the test with my code (this day at 10H13, French time).
From 11/10/2017 to 11/10/2017 = 0 day
If in the system date windows, I advance one day (12/1082017 10:13)
the result is 1 day.
Does the calculation of dates take into account the day of the second date completed in the Windows timetable?
(No = 0 day - Yes = 1 day).
Seeking Dmitry's Opinion
To be debated !
Regards
JB
Hello JB, Mcsimm, Sign2,
I think whether it is 0 days or 1 day perhaps depends on the context of the project.
For this project, to be admitted and then discharged on the same day is 1 day, not 0 days.
I have changed my script to force days to show as whole numbers (no decimals) which may have caused some confusion. Also, both dates must now be 'ticked' before the calculation is performed and there is a simple check for discharge date being >= admission date.
Derek.
Привет, Sign2
Возможно, это также так
Derek.
Добрый день
Ваш скрипт работает, алгоритм под себя переделал, почему-то у меня не работает
procedure Calculator_DateTimePicker1_OnChange (Sender: string);
begin
Calculator.Edit7.Value:= Calculator.DateTimePicker2.DateTime - Calculator.DateTimePicker1.DateTime +1;
end;
procedure Calculator_DateTimePicker2_OnChange (Sender: string);
begin
Calculator.Edit7.Value:= Calculator.DateTimePicker2.DateTime - Calculator.DateTimePicker1.DateTime +1;
end;
begin
end.
Доброй ночи.
Хотел бы возобновить эту тему.
Есть одно поле с датой (к примеру 12.08.2023)
Нужно из значения в этом поле (ДАТА) вычислить 730 дней (т.е.2 года) никуда больше не вводя никакие лишние значения.
И итоговое значение занести в таблицу к уже имеющимся там записям.
понимаю, что надо это сделать скриптом, скорее всего.
form1.edit1.value:= form1.datetimepicker2.DateTime - эти самые 730 дней
вот как программе дать понять, что эти самые 730 - это дни
Подскажите - как это сделать? не могу взять в толк
Дата сохраняется как число дней ...
http://myvisualdatabase.com/help_ru/scr … etime.html
А как быть если год високосный ) ?
В MVD еще есть функция для работы с месяцами.
function IncYear(ADate:TDateTime; AValue:integer):TDateTime;
// изменить дату на нужное число лет
begin
Result := IncMonth(ADate,AValue*12);
end;
а можно все таки на живом примере?
в таблице в последней колонке у меня должна отображаться дата окончания срока действия (от выставленной даты + 24 месяца).
Например, сегодня 13.08.2023, а в таблице должна стоять в последней колонке дата 13.08.2025
прикладываю мою поделку (для понимания)
strftime('%d.%m.%Y',"date"."date",'+2 year','localtime')
и это плохая практика называть поля из списка зарезервированых слов.
Date, Time, .....
strftime('%d.%m.%Y',"date"."date",'+2 year','localtime')
и это плохая практика называть поля из списка зарезервированых слов.
Date, Time, .....
а куда мне это вписывать? и все ли верно в остальном?
это скрипт? или вычисляемое поле?
спасибо за помощь
Подозрительно похоже на вычисляемое поле.
Привет Pixelpro,
Я считаю, что «strftime» по умолчанию выводит текст, который затем неправильно сортирует столбец даты истечения срока действия.
Если для вас важна последовательность сортировки даты истечения срока действия, я бы с уважением предложил переопределить вычисляемое поле как «дата» и преобразовать вычисляемое поле «strftime» обратно из «текста» после того, как необходимое количество лет было добавлено.
strftime('%d.%m.%Y',"date"."date",'+2 year','localtime')
и это плохая практика называть поля из списка зарезервированых слов.
Date, Time, .....
проверил - может я ошибся (или я тупой, тоже вариант) - но ваш код не работает (проверил разные варианты написания кода, в таблице date поле end_finish сделал вычисляемым, и вставил ваш код)
поправьте, пожалуйста
Привет Pixelpro,
Я считаю, что «strftime» по умолчанию выводит текст, который затем неправильно сортирует столбец даты истечения срока действия.
Если для вас важна последовательность сортировки даты истечения срока действия, я бы с уважением предложил переопределить вычисляемое поле как «дата» и преобразовать вычисляемое поле «strftime» обратно из «текста» после того, как необходимое количество лет было добавлено.
спасибо огромное. по вашему примеру все сделал. и все работает!
сразу видно - человек знает (а я тупой) (((
и последний вопрос - а как этот конечный результат преобразовать в дни?
т.е. к примеру к 13.08.2023 прибавить 2 года (а именно 730 дней) - будет 13.08.2025 года ( если можно учесть и високосные года)
но
- к примеру от завтрашнего числа - останется уже 729 дней.
я вот именно про это спросить хочу
как это реализовать?
Чтобы показать количество дней, оставшихся до истечения срока действия, попробуйте что-то вроде этого
Derek.
у меня уже руки опускаются.
стоило поменять название колонки на свое (и соответственно сменил названия в скрипте) - и стала ошибка вылазить.
я уже ничего не понимаю. почему?!!!!
пожалуйста, разъясните мне, тупорылому, что во мне не так...
прикладываю измененный мною проект
Вы не можете ссылаться на то же поле («end_days»), которое вы используете при фактическом расчете «end_days».
В дополнение к этому «вычисляемое поле» должно использовать «date_start», а не «end_days».
Derek.
My Visual Database → Russian → Количество дней между двумя датами
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi