Funkcijas, aprēķinot un parādot Date/Time vērtības programmā Access

Strādājiet jebkur no jebkuras ierīces ar Microsoft 365

Jauniniet uz Microsoft 365, lai strādātu jebkur, izmantojot jaunākos līdzekļus un atjauninājumus.

Jaunināt tūlīt

Mērens: nepieciešama pamata makro, kodēšanas un sadarbspējas prasmes.

Kopsavilkums

Date/Time vērtība tiek glabāta kā dubultās precizitātes numuru, jo var tikt parādīts nepareizs formatēšanas rezultātus, mēģinot manipulēt ar datuma/laika vērtības izteiksmē. Šis raksts parāda, kā izveidot izteiksmes un pielāgotas funkcijas konkrētu datumu rādīšanai un laika intervālu aprēķināšanai. Microsoft piedāvā programmēšanas piemērus tikai ilustrācijai, nesniedzot nekādas tiešas vai netiešas garantijas. Tas ietver, bet neaprobežojas ar netiešām garantijām par piemērotību pārdošanai vai atbilstību noteiktam mērķim. Šajā rakstā tiek pieņemts, ka esat iepazinies ar programmēšanas valodu, kas tiek demonstrēta un rīkus, kas tiek izmantoti, lai izveidotu un atkļūdošanas procedūras. Microsoft atbalsta inženieri var palīdzēt izskaidrot konkrētās procedūras funkcionalitāti, taču tie nemainīs šos piemērus, lai nodrošinātu papildu funkcionalitāti vai veidotu procedūras, kas atbilst jūsu specifīpašajām prasībām.

Papildinformācija

Parādot noteiktus datumus

Lai parādītu noteiktus datumus, varat izmantot funkciju DateSerial () , lai manipulētu ar datuma, mēneša un gada daļām. Piemēram, var izmantot šādas izteiksmes tekstlodziņā rekvizītā ControlSource vai tūlītējā logā, lai atgrieztu noteiktus datumus:

  • Tekošais mēnesis:

    DateSerial (gads (datums ()), mēnesis (datums ()),1)

  • Nākamajā mēnesī:

    DateSerial (gads (datums ()), mēnesis (datums ()) + 1, 1)

  • Pašreizējā mēneša pēdējā diena:

    DateSerial (gads (datums ()), mēnesis (datums ()) + 1,0)

  • Nākamā mēneša pēdējā dienā:

    DateSerial (gads (datums ()), mēnesis (datums ()) + 2,0)

  • Iepriekšējā mēneša pirmajā dienā:

    DateSerial (gads (datums ()), mēnesis (datums ())-1, 1)

  • Iepriekšējā mēneša pēdējā dienā:

    DateSerial (gads (datums ()), mēnesis (datums ()), 0)

  • Kārtējā ceturkšņa pirmajā dienā:

    DateSerial (gads (datums ()), Int ((mēnesis (datums ())-1)/3) * 3 + 1, 1)

  • Pašreizējā ceturkšņa pēdējā diena:

    DateSerial (gads (Date ()), Int ((mēnesis (datums ())-1)/3) * 3 + 4,0)

  • Pašreizējās nedēļas pirmā diena (pieņemot, ka svētdiena = 1. diena):

    Date ()-WeekDay (Date ()) + 1

  • Pašreizējās nedēļas pēdējā diena:

    Date ()-WeekDay (Date ()) + 7

  • Pašreizējās nedēļas pirmā diena (izmantojot dialoglodziņa opcijas iestatījumus):

    Date ()-WeekDay (Date (),0) + 1

  • Pašreizējās nedēļas pēdējā diena:

    Date ()-WeekDay (Date (),0) + 7

Lai iegūtu papildinformāciju par finanšu gada vai fiskālā mēneša aprēķināšanu, noklikšķiniet uz šī raksta numura un skatiet Microsoft zināšanu bāzes rakstu:

210249 kā iegūt konkrētu datumu finanšu gadu vai mēnesi programmā Access 2000Uzmanību: ja jums sekot šajā piemērā aprakstītās darbības, modificējat parauga datu bāzes Northwind. mdb. Iespējams, vēlēsities dublēt Northwind. mdb failu un veiciet šīs darbības datu bāzes kopiju.

Laika intervālu aprēķināšana

Tā kā laika vērtība tiek glabāta kā daļa no 24 stundu dienas, varat saņemt nepareizus formatēšanas rezultātus, mēģinot pievienot, atņemt, reizināt vai sadalīt laika datus, kas lielāki par 24 stundām. Piemēram, ja mēģināt atrast stundu skaitu, kas pagājis starp diviem datumiem, atņemot vērtības Visual Basic, var tikt parādīts nepareizs numurs. Lai to demonstrētu, tūlītējā logā ierakstiet šādu kodu un ņemiet vērā, ka tas atgriež vērtību 0:00 stundas, nevis pareizo vērtību 53:00 stundas:

   StartDate=#6/1/93 8:00AM#   EndDate=#6/3/93 1:00PM#   ?Format(EndDate-StartDate,"hh:mm")

Lai novērstu formatēšanas problēmas, ko izraisa laika vērtības, kas pārsniedz 24 stundas, var izmantot Int () un CSng () funkcijas Visual Basic, lai atdalītu aprēķinātā laika vērtību dažādos mainīgos dienas, stundas, minūtes un sekundes. Piemēram, varat iekļaut pielāgoto funkciju izveidot atsevišķu laika mainīgie koda fragments:

 '------------------------------------------------------------------- ' This sample code separates a time interval into seven variables for ' the following values: days, hours, minutes, seconds, total time in ' hours, total time in minutes, and total time in seconds. ' ' The interval argument is flexible; it can be a single value, an ' expression, or a field reference. '------------------------------------------------------------------- Dim totalhours As Long, totalminutes As Long, totalseconds As Long Dim days As Long, hours As Long, minutes As Long, seconds As Long Dim interval As Variant days = Int(CSng(interval)) totalhours = Int(CSng(interval * 24)) totalminutes = Int(CSng(interval * 1440)) totalseconds = Int(CSng(interval * 86400)) hours = totalhours Mod 24 minutes = totalminutes Mod 60 seconds = totalseconds Mod 60

Mainīgo lielumu totalhours, totalminutes un totalseconds var izmantot, lai laika vērtību rādītu kā vienu laika vienību. Dienas, stundas, minūtes un sekundes mainīgie ļauj sadalīt laika vērtību daļās laiku. Lai rādītu laika vērtības dažādos formātos, varat sapludināt šos mainīgos, kā parādīts tālāk minētajās parauga funkcijās.

  • Getelapseddays () funkcija aprēķina pagājušo laiku starp divām Date/Time vērtībām un parāda rezultātu dienās.

  • Getelapsedtime () funkcija aprēķina pagājušais laiks starp laika vērtības un parāda rezultātu dienas, stundas, minūtes un sekundes.

  • Funkcija Gettimecardtotal () summē lauka laika vērtības tabulā un parāda kopsummu stundās un minūtēs.

GetElapsedDays () parauga funkcija

Lai izveidotu Getelapseddays () funkciju, rīkojieties šādi:

  1. Atveriet parauga datu bāzi Northwind. mdb.

  2. Izveidojiet moduli un ierakstiet šādu rindiņu deklarāciju sadaļā, ja tā vēl nav:

     Option Explicit
  3. Ierakstiet šādu funkciju:

     Function GetElapsedDays (interval)    Dim days As Long    days = Int(CSng(interval))    GetElapsedDays = days & " Days " End Function
  4. Lai pārbaudītu šo funkciju, izveidojiet jaunu vaicājumu, kura pamatā ir tabula Orders.

  5. QBE režģī pievienojiet šādus laukus. Field: ShippedDate Show: True Field: OrderDate Show: True Field: ElapsedTime: GetElapsedDays([ShippedDate]-[OrderDate]) Show: True

  6. Palaistu vaicājumu. Ņemiet vērā, ka kolonnā ElapsedTime tiek parādīts to dienu skaits, kas katram tabulas Orders ierakstam ir laukā ShippedDate un OrderDate.

GetElapsedTime () parauga funkcija

Lai izveidotu Getelapsedtime () funkciju, rīkojieties šādi:

  1. Izveidojiet jaunu tabulu ar šādu struktūru un saglabājiet to kā TimeLog. Table: TimeLog ----------------------- Field Name: StartTime Data Type: Date/Time Format: General Date Field Name: EndTime Data Type: Date/Time Format: General Date

  2. Skatīt grafiku tabulu datu lapas skatā, ievadiet šādus trīs ierakstus un pēc tam aizveriet tabulu: StartTime EndTime -------------------------------------------- 5/10/95 4:57:00 PM 5/15/95 2:38:00 AM 5/11/95 10:17:31 AM 5/24/95 6:05:00 PM 5/18/95 9:16:43 AM 5/19/95 5:03:00 PM

  3. Izveidojiet moduļa un deklarāciju sadaļā ierakstiet šādu rindiņu:

     Option Explicit
  4. Ievadiet šādu funkciju:

     Function GetElapsedTime(interval) Dim totalhours As Long, totalminutes As Long, totalseconds As _     Long Dim days As Long, hours As Long, Minutes As Long, Seconds As Long days = Int(CSng(interval)) totalhours = Int(CSng(interval * 24)) totalminutes = Int(CSng(interval * 1440)) totalseconds = Int(CSng(interval * 86400)) hours = totalhours Mod 24 Minutes = totalminutes Mod 60 Seconds = totalseconds Mod 60 GetElapsedTime = days & " Days " & hours & " Hours " & Minutes & _ " Minutes " & Seconds & " Seconds " End Function

    Piezīme:Getelapsedtime funkcija prasa, lai jūs nodot to datumu un laiku.

  5. Lai pārbaudītu šo funkciju, izveidojiet jaunu atskaiti, kuras pamatā ir tabula Timelog , izmantojot vedni AutoReport.

  6. Skatiet atskaiti noformējuma skatā.

  7. Pievienojiet nesaistītu tekstlodziņu Savlaicības tabulas detaļu sadaļai un iestatiet tā rekvizītus šādi: Textbox --------------- Name: ElapsedTime ControlSource: =GetElapsedTime([EndTime]-[StartTime]) Width: 3 inches

  8. Priekšskatīt atskaiti. Ievērojiet, ka katrs ieraksts parāda kopējo pagājušo laiku dienās, stundās, minūtēs un sekundēs.

GetTimeCardTotal () parauga funkcija

Lai izveidotu funkciju Gettimecardtotal () , rīkojieties šādi:Piezīme: parauga kods šajā rakstā izmanto Microsoft datu piekļuves objekti. Lai šis kods darbotos pareizi, ir jāatsaucas uz Microsoft DAO 3,6 objektu bibliotēku. Lai to izdarītu, Visual Basic redaktora izvēlnē Rīki noklikšķiniet uz atsauces un pārliecinieties, vai ir ATZĪMĒTA izvēles rūtiņa Microsoft DAO 3,6 objektu bibliotēka .

  1. Izveidojiet jaunu tabulu ar šādu struktūru un saglabājiet to kā kontrolsarakstu. Table: TimeCard ----------------------- Field Name: Daily Hours Data Type: Date/Time Format: Short Time

  2. Skatītu kontrolsaraksta tabulu datu lapas skatā, ievadiet šādus četrus ierakstus un pēc tam aizveriet tabulu: 8:15 7:37 8:12 8:03

  3. Izveidojiet moduli un ierakstiet šādu rindiņu deklarāciju sadaļā, ja tā vēl nav:

     Option Explicit
  4. Ierakstiet šādu funkciju:

     Function GetTimeCardTotal () Dim db As DAO.Database, rs As DAO.Recordset Dim totalhours As Long, totalminutes As Long Dim days As Long, hours As Long, minutes As Long Dim interval As Variant, j As Integer Set db = dbengine.workspaces(0).databases(0) Set rs = db.OpenRecordset("timecard") interval = #12:00:00 AM#    While Not rs.EOF       interval = interval + rs![Daily hours]       rs.MoveNext    Wend totalhours = Int(CSng(interval * 24)) totalminutes = Int(CSng(interval * 1440)) hours = totalhours Mod 24 minutes = totalminutes Mod 60 GetTimeCardTotal = totalhours & " hours and " & minutes & " minutes" End Function
  5. Lai pārbaudītu šo funkciju, ierakstiet šādu rindiņu tūlītējā logā un pēc tam nospiediet taustiņu ENTER:

     ?GetTimeCardTotal()

    Ņemiet vērā, ka tūlītējais logs parāda 32 stundas un 7 minūtes.

Atsauces

Lai iegūtu papildinformāciju par datuma/laika aprēķināšanas vērtību, noklikšķiniet uz šī raksta numura un skatiet Microsoft zināšanu bāzes rakstu:

210276 Date/Time datu glabāšana, aprēķināšana un salīdzināšana

Vai nepieciešama papildu palīdzība?

Paplašiniet savas prasmes
Iepazīties ar apmācību
Esiet pirmais, kas saņem jaunās iespējas
Pievienoties Microsoft Insider

Vai šī informācija bija noderīga?

Paldies par jūsu atsauksmēm!

Paldies par atsauksmēm! Šķiet, ka jums varētu būt noderīgi sazināties ar kādu no mūsu Office atbalsta speciālistiem.

×