Hvordan få forskjellen av to datoer i Perl

I Perl programmering, fordi datoer kan ha tegn som mellomrom, komma eller bokstaver, kan du ikke bare ta to datoer til og trekke fra hverandre. Du trenger å konvertere dem til rene tall før du kan få forskjellen mellom de to; deretter tilbake som verdi for brukeren. Konverter de to datoene til epoken tid, noe som er en beregning av antall sekunder som har gått siden 1. januar 1970. Dette gjør det mulig å trekke en datoverdi fra den andre for å få forskjellen.

Bruksanvisning

1 Åpne en ny Perl programfil. Skriv inn følgende kode:

bruke Time :: Lokal;

Denne modulen inneholder dato og klokkeslett funksjoner du trenger for å beregne tidsverdier.

2 Skriv inn følgende kode:

skrive "Enter dag (1-31):";

$ Dag = <>;

skrive "Enter måneden (1-12):";

$ Måned = <>;

$ Måned = $ i måneden - 1;

skrive "Enter år:";

$ Året = <>;

$ År = $ år - 1900;

Disse linjene be brukeren om å skrive inn en dag i måneden, måned og år, alle som heltall. Du må minske måned verdien av en fordi "timelocal" funksjonen bruker måneden verdier fra null til 11, ikke en til 12. Også, må du trekke fra 1900 fra år verdi for denne funksjonen også. Du kan programmere noen feilkontrollkoden for å sikre brukeren angir et riktig verdi, eller hvis du ønsker å tillate en bruker å skrive inn et navn på måned, for eksempel "januar" programmet en funksjon for å konvertere denne verdien til null.

3 Skriv inn følgende kode:

$ Time = timelocal (0,0,0, $ dag $ måned, $ år);

Dette skaper en variabel kalt $ tid som kaller timelocal funksjon for å konvertere den bruker innsendt dato for å epoke er tid. De tre første parametrene er alle nuller fordi de står for sekunder, minutter og timer. Du kan be brukeren om disse verdiene også hvis du vil. Den timelocal funksjonen returnerer en feil hvis en dato som ikke eksisterer, slik som i mars 35 eller til og med 31 juni, så sørg for at kode kontrollerer for disse mulighetene.

4 Skriv inn følgende kode:

$ CurTime-verdien = tid;

$ Diff = $ CurTime-verdien - $ tid;

Den første linjen skaper en variabel kalt $ CurTime-verdien som bruker tiden funksjonen til å returnere gjeldende dato i epoken tid. Den andre linjen oppretter en variabel kalt $ diff som får forskjellen på dagens dato minus den bruker innsendt dato. Den heltall Resultatet er antall sekunder som eksisterer mellom de to datoene. Hvis tallet er positivt, så brukeren datoen kommer før gjeldende dato. Hvis tallet er negativt, det kommer etter.

5 Skriv inn følgende kode:

if ($ diff> 0) {

$diff = int($diff / 60 / 60 / 24);

print $ diff. "Dager har gått siden datoen du skrev inn.";

} Else {

$diff = abs(int($diff / 60 / 60 / 24));

skriver "Det er". $ Diff. "Flere dager frem til det tidspunkt du har angitt.";

}

HVIS-funksjonen sjekker for å se om den bruker innsendt dato er før eller etter dagens dato, bare for å vite hvilke utsagn skrive ut på skjermen. I begge tilfeller, konverterer $ diff verdi fra sekunder til dager, og deretter til et heltall fra en float (for å unngå å skrive ut flere desimaler). Hvis verdien er negativ, abs funksjon blir den absolutte verdien, i hovedsak dreie negativt tall til et positivt tall. For eksempel, "-15 dager" blir "15 dager".

6 Lagre og kjøre Perl program.

Hint

  • Du trenger ikke å bruke gjeldende tid i programmet. Du kan be brukeren om to datoer i stedet for en, og deretter konvertere dem begge til epoken tid bruker timelocal funksjon.