programmeervraagje Datums

Gewoon even offtopic praten over van alles en nog wat.

Moderator: Moderators

Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

programmeervraagje Datums

Bericht door Swets »

Denk gooi het hier ook ff neer, tis wel een cnc forum, maar krijg er altijd best wel veel programmeer hulp.. :-)

ik moet iets schrijven in een plc, ik moet 2 datums met elkaar vergelijken, en uitrekenen hoeveel dagen er tussen zit....

maar ik zit natuurlijk dat niet alle maanden even veel dagen hebben.... en schrikkeljaren.. enz enz

dus ben een beetje opzoek hoe ik dat nu het makkelijkste kan doen?
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Sven
Berichten: 5985
Lid geworden op: 24 sep 2008 09:13
Locatie: Arnhem
Contacteer:

Re: programmeervraagje Datums

Bericht door Sven »

Misschien is unix time bruikbaar?

https://en.wikipedia.org/wiki/Unix_time
350 kilo 1250x1250 aluminium portaalfrees:
http://cnczone.nl/viewtopic.php?f=8&t=13039
Beginnen met CNC? Ontwerpen, bouwen, of toch kopen?
http://cnczone.nl/viewtopic.php?f=8&t=15481
Floppy
Berichten: 774
Lid geworden op: 11 apr 2007 23:40
Locatie: Zeddam

Re: programmeervraagje Datums

Bericht door Floppy »

Als je in Google "days between dates" in typt krijg je allerlei oplossingen in C java of python.
Gebruikersavatar
pgroot
Donateur
Berichten: 147
Lid geworden op: 04 dec 2022 22:51
Locatie: heemskerk

Re: programmeervraagje Datums

Bericht door pgroot »

kun je niet gewoon simpelweg het verschil in uren tellen en dat omrekenen naar aantal dagen?
hfjbuis
Donateur
Berichten: 3058
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: programmeervraagje Datums

Bericht door hfjbuis »

In C# en andere programmeertalen is het gewoon datum2 van datum1 aftrekken. Vervolgens heeft de C# timespan (class) de mogelijkheid om het aantal dagen op te vragen (of het aantal uren,seconden, etc).
Meestal worden datums als het aantal seconden verstreken sinds een startdatum bewaard in een floating point of longlong waarde.
Ook de PLC zal wel zoiets hebben.

Code: Selecteer alles

        public void AantalDagen()
        {
            DateTime D1 = new DateTime(2020, 1, 1);
            DateTime D2 = new DateTime(2020, 31, 7);
            TimeSpan Delta = D2.Subtract(D1);
            Debug.WriteLine("Aantal dagen op 3 decimalen keurig: {0:0.000}", Delta.TotalDays);
        }
There are only 2 limits, the sky and your imagination
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: programmeervraagje Datums

Bericht door Swets »

bedankt.... ik ga het allemaal eens bekijken.....

ik weet niet of er echt van die tijd/datum functies in de plc zitten.... Ik denk het haast niet... maar ik ga eens zoeken...

en ik ga die linkjes eens bekijken..... maar volgens mij is het allemaal nog niet zo makkelijk....

ik denk als ik iets ga maken, dat ik ten eerst iets moet maken hoeveel dagen elke maand heeft
en dan is februari natuurlijk de lastigste maand....
http://www.arjan-swets.com (met cnc filmpjes)
hfjbuis
Donateur
Berichten: 3058
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: programmeervraagje Datums

Bericht door hfjbuis »

Code: Selecteer alles

    Int32[] DaysOfMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
There are only 2 limits, the sky and your imagination
MartijnD
Berichten: 32
Lid geworden op: 05 mar 2023 17:39

Re: programmeervraagje Datums

Bericht door MartijnD »

Misschien niet onbelangrijk, naar om wat voor een PLC gaat het?
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: programmeervraagje Datums

Bericht door Swets »

M340 van schneider, , programeer pakket EcoStructure Contol Expert...


ik zit nu even te kijken tussen de standaard functie's...
Ik zie een MULTIME en een DIVTIME
ik heb een TIME_TO_

meer zie ik niet.... ?
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: programmeervraagje Datums

Bericht door Swets »

ik heb dit gevonden:
https://www.omnicalculator.com/everyday ... ween-dates

maar iets gaat er nog niet goed bij mij, want als ik start jaar het zelfde zet,,,, ik doe als eind vandaag, 30-5-2023 maar ik zet de start datum op 16-5-2023 krijg ik toch 365 dagen?

ik snap dit ook niet helemaal:
Afbeelding

en ik snap ook even niet dat ik op die pagina, de dagen nergens terug vind... ik zie de jaren om rekenen naar dagen, dan de maanden om reken naar dagen, maar niets over de dagen ?

ik had nu dit:

Code: Selecteer alles

startDays	:=Start_Day;
startMonth	:=Start_Month;
startYear	:=Start_Year;

endDays		:=End_Day;
endMonth	:=End_Month;
endYear		:=End_Year;

years:=int_to_real(End_Year-Start_Year);

days1:=(years*365.25);

month1:=12-startMonth;
month2:=End_Month;
monthTotal:=month1+month2;

days2:=(int_to_real(monthTotal) * (365.25/12.0));

Days:=real_to_int(days1+days2);
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
pgroot
Donateur
Berichten: 147
Lid geworden op: 04 dec 2022 22:51
Locatie: heemskerk

Re: programmeervraagje Datums

Bericht door pgroot »

Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: programmeervraagje Datums

Bericht door Swets »



Ik geloof dat ik het heb, althans, ik krijg dezelfde antwoorden als de webpagina...

ik heb nu dus dit

Code: Selecteer alles


daysTotal:=0;

startDays	:=Start_Day;
startMonth	:=Start_Month;
startYear	:=Start_Year;

endDays		:=End_Day;
endMonth	:=End_Month;
endYear		:=End_Year;

DaysInMonth[1]	:=31;
DaysInMonth[2]	:=28;
DaysInMonth[3]	:=31;
DaysInMonth[4]	:=30;
DaysInMonth[5]	:=31;
DaysInMonth[6]	:=30;
DaysInMonth[7]	:=31;
DaysInMonth[8]	:=31;
DaysInMonth[9]	:=30;
DaysInMonth[10]	:=31;
DaysInMonth[11]	:=30;
DaysInMonth[12]	:=31;
(* __________________________________________________________________________________________*)
Years:=int_to_real(End_Year-Start_Year);
daysYears:=real_to_int(years*365.25);
(* __________________________________________________________________________________________*)
if startYear=endYear and startMonth=endMonth then (* same Year , Same Month *)
	test1:=test1 xor 1;
	Days:=endDays-startDays;
end_if;
(* __________________________________________________________________________________________*)
if startYear=endYear and startMonth<endMonth then (* same Year, Different Month *)
	test2:=test2 xor 1;
	for t:=startMonth to endMonth-1 do
		daysTotal:= daysTotal+DaysInMonth[t];
	end_for;
	Days:=(endDays-startDays)+daysTotal;
end_if;

if startYear<endYear and startMonth=endMonth then (* Different Year , Same Month *)
	test3:=test3 xor 1;
	Days:=(endDays-startDays)+ daysYears;
end_if;
(* __________________________________________________________________________________________*)
if startYear<endYear and startMonth<endMonth then (* Different Year, Different Month *)
	test4:=test4 xor 1;
	for t:=startMonth to endMonth-1 do
		daysTotal:= daysTotal+DaysInMonth[t];
	end_for;
	Days:=(endDays-startDays)+daysTotal+ daysYears;
end_if;
(* __________________________________________________________________________________________*)
if startYear<endYear and startMonth>endMonth then (* Different Year, Different Month *)
	test5:=test5 xor 1;
	for t:=StartMonth to 12 do
		daysTotal:= daysTotal+DaysInMonth[t];
	end_for;
	for t:=1 to endMonth-1 do
		daysTotal:= daysTotal+DaysInMonth[t];
	end_for;
	Days:=(endDays-startDays)+daysTotal+ (daysYears-365);
end_if;
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Rocnc
Berichten: 312
Lid geworden op: 02 dec 2008 20:39

Re: programmeervraagje Datums

Bericht door Rocnc »

ik heb niet de hele code begrepen, maar houd je ook rekening met schrikkeljaren? Ik zie voor februari alleen 28 dagen staan. Of flik je daar verderop nog een kunstje mee? Iets van jaartal/4=geheel getal?
Progress isn't made by early risers. It's made by lazy men trying to find easier ways to do something. - Robert Heinlein
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: programmeervraagje Datums

Bericht door Swets »

Rocnc schreef: 30 mei 2023 12:01 ik heb niet de hele code begrepen, maar houd je ook rekening met schrikkeljaren? Ik zie voor februari alleen 28 dagen staan. Of flik je daar verderop nog een kunstje mee? Iets van jaartal/4=geheel getal?
ja dat snap ik ook nog niet helemaal

bij het aantal dagen in een jaar zit wel dit: daysYears:=real_to_int(years*365.25);
dus die .25, dus bij 4 jaren komt er eentje bij....

en net wat ik zeg, als ik mij verhaaltje check tov dat online verhaal, krijg ik de zelfde waarde.... maar ik heb er ook nog niet een super gevoel bij...
:-)

de bedoeling van het verhaal is dus om te kijken hoe lang de installatie draait.... dus ergens komt (vast) de start datum te staan, en ik wil dus kijken aan de huidige datum ( vanuit de klok chip) kijken hoeveel dagen er verlopen zijn tov de start datum...

maar ik zit dus ook een beetje met dat schrikkeljaar verhaal? weet ook nog niet goed hoe ik dat ff kan testen... :-)
best wel lastig allemaal.... vind ik toch altijd met tijd en datum verhaaltjes... 60,12,24 30,31,28 allemaal van die rare getallen... :-) en dan weer zon uitzondering, om de 4 jaar.... pfffff...
http://www.arjan-swets.com (met cnc filmpjes)
Plaats reactie