Hallo,

Als een gebruiker een datum invoert bijvoorbeeld 14-03-2020 dan wil ik de naam van de dag terug krijgen.
Ik kan gebruik maken van de getDay() functie maar als ik de datum zo invoer gebeurt er niets omdat de format niet klopt.
In Javascript zou de datum zo ingevoerd moeten worden new Date("March 14, 2020 23:15:00");


<script type = "text/javascript">
    var dateday = new Date("March 14, 2020 23:15:00");  //zo zou ik het willen-> var dateday = new Date("14-03-2020");
    document.write(dateday.getDay());
</script>


Is hier een makkelijke / snelle manier voor?
Dus je kunt wel doen wat je wilt, maar de weg er naartoe is niet zo gemakkelijk?

Je zou kunnen overwegen om een library te gebruiken, zoals de datepicker UI. Bijkomend voordeel is waarschijnlijk dat de datums die je als "input" hebt waarschijnlijk direct het juiste formaat hebben om verdere bewerkingen uit te voeren, zoals het weergeven van de bijbehorende dag-naam.
2020-03-14 werkt wel als argument voor het Date object. Dus je kunt de string splitsen op de streepjes, de array achterstevoren zetten en de boel weer aan elkaar plakken:


<script>
function reverse(datum) {
  return datum.split("-").reverse().join("-");
}

console.log(reverse('14-03-2020'));
</script>
Of gewoon zorgen dat je de input gebruiksklaar maakt. Dit is code schrijven om invoer te repareren, dat is niet nodig als de invoer wel direct bruikbaar is.

Vraag is of de topicstarter daar invloed op uit kan oefenen. Zonee, dan zal zo'n kunstgreep/workaround nodig zijn, zoja repareren.
Ik begrijp wat je bedoelt Thomas maar Nederland heeft nou eenmaal de datumnotatie dd-mm-YY en daar kan het Javascript Date object niet mee overweg helaas.

Het wordt wel anders als je de html date type gebruikt. Deze draait (iig in Chrome) de datum om naar yyyy-mm--dd.

<!DOCTYPE html>
<html>
	<body>
		<form method="post">
			<input type="date" name="birthday" onchange="alert(this.value);">
			<input type="submit">
		</form>
	</body>
</html>
Als je een datepicker hebt, dan heb je meteen een makkelijke manier om een goed datum-formaat te accepteren. Uiteraard moet je hier serverside ook op controleren.
dd-mm-YY(YY) is dan misschien de nederlanse standaard, maar daar kun je met geen mogelijkheid (eenvoudig) mee sorteren/filteren/zoeken/vergelijken. yyyy-mm-dd daarentegen volgt zowel een logische numerieke alsook lexicografische sortering. Dit is dus een ideaal "intern formaat".

Hoe je dit verder presenteert (in een lokale standaard, bijvoorbeeld dd-mm-YY of whatever) staat hier verder helemaal los van.

Het is veel makkelijker om een standaard datum een bepaald format te geven dan om een lokaal format om te buigen om hier vervolgens makkelijk mee te kunnen rekenen of over te dragen aan andere componenten (die nagenoeg altijd dit standaard formaat direct accepteren) of zelfs om dit om te zetten naar een ander lokaal formaat.

Het enige gevolg van het voeren van een custom/lokaal format aan code of een database is dat je dit moet blijven repareren omdat het format in feite onhandelbaar is.

Werk gewoon met een standaard (die altijd werkt) en als je een keer een datum wilt weergeven kun je het er met (wederom, standaard) formatteringsfuncties precies zo uit laten zien zoals jij het wilt hebben. Maar hoe je datums presenteert staat echt helemaal los van hoe je dit intern opslaat.
>> Werk gewoon met een standaard (die altijd werkt) en als je een keer een datum wilt weergeven kun je het er met (wederom, standaard) formatteringsfuncties direct van maken wat je maar wilt.

Ja gewoon yyyy-mm-dd binnen je applicatie en de database gebruiken. Helemaal mee eens. en voor de eindgebruiker kun je de format functies gebruiken om de datum op zijn nederlands weer te geven. Maar met in een formulierveld <input type="text"> ligt het anders. Hiermee wil je graag dat de eindgebruiker (lees een opa van 83 jaar oud) er mee overweg kan. Deze gebruikers zijn de standaard yyyy-mm-dd absoluut niet gewend dus je moet er over nadenken HOE je dit invoerveld wilt vormgeven.

Er zijn overigens al gauw drie opties:
- drie dropdown velden: dag, maand en jaar (die heeft ook een vertaalslag nodig)
- een HTML5 date type invoerveld waarbij je het probleem aan de webbrowser overlaat. Hier zijn zowel voordelen als nadelen aan verbonden.
- een text type invoerveld al dan niet met een javascript datepicker. In combinatie met de datepicker zou je er nog voor kunnen kiezen om de notatie yyyy-mm-dd in het formulierveld te hanteren maar blijft voor de nederlandse gebruikers toch verwarrend...

[size=xsmall]Toevoeging op 15/03/2020 15:00:05:[/size]

En dat onhandelbaar zoals jij het stelt Thomas is toch wel enigszins overdreven als ik het mag zeggen. Zoals Ariën al zegt zul je toch serverside moeten valideren. Als de datumtekst vervolgens valide is dan kan het omdraaien eigenlijk niet mis gaan.
Ik moet het nog eens uittesten met de JqueryUI datapicker, maar volgens mij kan je ook de presentatie aanpassen in elk gewenst format, terwijl die uiteindelijk dan onderwater yyyy-mm-dd in de POST-request stuurt.
Als je niet wilt dat een gebruiker verkeerder dingen in kan vullen moet je deze gewoon niet de gelegenheid geven om verkeerde dingen in te vullen :).

Gebruik dus dropdowns of wellicht nog beter (want met dropdowns kun je nog steeds ongein uithalen zoals 31-02-2021 tenzij je hier allerlei logica in stopt) een datepicker.

Met onhandelbaar bedoel ik "niet direct te gebruiken". Er zal eerst een vertaalslag plaats moeten vinden. Het lijkt mij op zijn zachtst gezegd onhandig om extra code te kloppen voor een probleem wat je in wezen zelf introduceert. Neem dit probleem direct zelf weg (indien mogelijk), dan is die extra code ook niet nodig. We leven niet meer in het tijdperk dat je per regel code betaald wordt (wat trouwens "prachtige" programma's opleverde, zoals je je wellicht kunt voorstellen).
Maar met een datepicker kun je nog veel meer ongein uithalen... dus zoals gezegd blijft serverside validatie toch noodzakelijk.

Reageren