Tijd als data in je oplossing
Sommige oplossingen op het web vereisen dat de bezoeker of de klant een datum invult. Het kan ook voorkomen dat het gaat om een tijd of om een tijdsbereik. Denk bijvoorbeeld aan een gewenste levertijd of openingstijden van je winkel.
Met behulp van standaardfunctionaliteit van SQL, HTML en C#, kan je deze tijden eenvoudig verwerken in je applicatie.
Tijden in SQL
In SQL heb je de volgende datatypen die te maken hebben met tijd:
* time
* date
* smalldatetime
* datetime
* datetime2
* datetimeoffset
Bovenstaande types bevatten allemaal een datum, behalve _time_. Time bevat alleen een waarde tussen 00:00:00 en 23:59:59 (inclusief nanoseconden). Als je een tijd wilt opslaan en alleen een tijd, dan is dit het type dat je wilt gebruiken.
Bijvoorbeeld openingstijden van een winkel:
openingstijdenId | int
tijdOpenVan | time
tijdOpenTot | time
Of gewenste levertijd bij een bestelling, ongeacht datum levering:
bestellingId | int
leverenVanaf | time
Als je de waarde in een kolom van type time op een andere manier wilt presenteren, gebruik van CONVERT:
-- Onderstaande geeft terug: 14:30. Of de variabele nou time of een datetime is.
SELECT Convert(varchar(5), GetDate(), 108)
Tijden in HTML
HTML biedt de mogelijkheid om tijden te kunnen aanpassen via INPUTs met type 'time'. De browser zal een dropdown tonen met daarin de keuze voor uur en minuut.
Je kan ook de waarde zetten op basis van het volgende formaat: HH:mm, dus 23:31 bijvoorbeeld. Dit kan via value="" of via Javascript.
Tijden in C#
In C# is TimeSpan de ideale kandidaat om enerzijds om te gaan met het datatype time uit SQL en de waarde uit het INPUT-type time. In MVC wordt de waarde "14:30" automatisch omgezet naar een TimeSpan als er een viewmodel gebind is. En Entity Framework maakt van het datatype time gebruik als je TimeSpan in je datamodel hebt.
Wil je een TimeSpan in een bepaald formaat teruggeven, maak dan gebruik van ToString. Bijvoorbeeld: begintijd.ToString("hh:mm") levert de string "14:30" op, als begintijd is TimeSpan(14, 30, 0);