Datum omzetten naar Engels voor inserting dbase
Ik heb al geprobeerd om date-format te wijzigen, maar dat schijnt lastig te zijn. Dus ik dacht misschien kan ik het omzetten voor de insert.
Het is bij de weergave dat je het moet omzetten!
Toevoeging op 20/12/2023 11:50:48:
select
DATE_FORMAT(datum, "%d/%m/%Y") geformateerdedatum,
datum origineledatum
from tbl
Alleen heb ik een formulier waarmee ik de informatie invul en zo in de database zet. Alleen met het input veld voor de datum is deze in het Nederlands. Dus 20-12-2023. Als ik het formulier versturen dan komt deze Nederlandse datum niet goed in de database.
Toevoeging op 20/12/2023 11:56:33:
Dat begrijp ik dat het veld in de database in het engels is.
Alleen heb ik een formulier waarmee ik de informatie invul en zo in de database zet. Alleen met het input veld voor de datum is deze in het Nederlands. Dus 20-12-2023. Als ik het formulier versturen dan komt deze Nederlandse datum niet goed in de database.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<form method="post" action="">
<input type="date" name="datum" />
<input type="submit" name="" value="submit" />
</form>
<hr />
<?php
echo '<pre>' . print_r( $_POST, TRUE ) . '</pre>';
$datum = $_POST['datum'];
echo '<p>ontvangen datum : ' . $datum . '</p>';
?>
<input type="text" value='<?php echo ( isset($_POST['datum']) ? $_POST['datum'] : '' ); ?>' size="30" />
<input type="date" name="datum" />
<input type="submit" name="" value="submit" />
</form>
<hr />
<?php
echo '<pre>' . print_r( $_POST, TRUE ) . '</pre>';
$datum = $_POST['datum'];
echo '<p>ontvangen datum : ' . $datum . '</p>';
?>
<input type="text" value='<?php echo ( isset($_POST['datum']) ? $_POST['datum'] : '' ); ?>' size="30" />
Code (php)
Overigens is er weinig "Engels" aan die datum. Een Amerikaan zal vandaag noteren als 12/20/2023.
Het is een iso formaat: ISO 8601
De Amerikaanse notatie is gewoonlijk bij opslag in de database, en met format -functies kan je in de view ervoor zorgen dat je een eigen notatie kan gebruiken.
Als je i.p.v. January het Nederlandse januari wilt gebruiken, dan moet je kijken naar de locale instellingen. Met IntlDateFormatter in combinatie met de standaard DateTime class. Maar ook MySQL/MariaDB heeft er volgens mij mogelijkheden in.
Gewijzigd op 20/12/2023 12:18:42 door - Ariën -
De reden?
Vaak heb je de datum in verschillende vormen nodig in je script: Je wilt ergens bepalen of de datum meer dan 25 jaar in het verleden ligt; je wilt hem ergens in een tabelletje weergeven in een numerieke notatie (20-12-2023) en je wilt hem ook nog in tekst weergeven (20 december 2023)
Dat soort zaken met weergeven zijn eenvoudiger te doen in PHP. Je kunt dan zonder een heel uitgebreide query te schrijven bepalen dat er "maart" moet komen te staan.
Anders heb je al gauw een array nodig van 12 maandnamen in die ene query. Dat wil je niet voor al je quey's zo gaan opzetten.
Dan maak je ergens een class die datetime extend in PHP waarin je de functies
$datum->formatNLvol() opneemt die dan jouw gewenste formaat ervan maakt (mbv de bestaande format() van datetime.
en misschien ook $datum->formatNL() die 20-12-2023 uitgeeft.
Ik ben voorstander van het beleid dat je bepaalde zaken pas doet op de plek waar het nodig is:
je haalt ook geen htmlspecialchars() over alle data die je uit de database trekt, maar dat doe je pas op het moment dat je die tekst ook werkelijk in een stuk html of xml duwt.
Je escapet niet elke mogelijk ' totdat je een tekst werkelijk in een query gebruikt.
En zo misvorm ik ook niet de datum al in de query bij het ophalen: zoals hierboven haalt Jan al 2x de datum kolom op: in een "raar" formaat (in NL gebruiken we meestal een - en niet een / als scheidingsteken) en het oorspronkelijke formaat ( om mee te rekenen?)
Gevaar van 2 kolommen met de datum is ook dat de waarde uit elkaar gaat lopen: ergens pas je de datum aan omdat je regels voorschrijven dat in geval de datum een feestdag is we +1 dag doen, maar dat doe je dan niet bij de geformateerde datum...
Kees Mulder op 20/12/2023 11:31:57:
Hoe kan ik een Nederlandse datum omzetten voordat ik deze toevoegen in mijn database? In mijn tabel is een Engelse notatie 2023-12-20 alleen op mijn website geeft het input data veld de Nederlandse notatie weer "20-12-2023". Kan ik deze omzetten voordat ik de insert maak?
Gewoon...
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$nl = "20-12-2023";
$en = implode("-", array_reverse(explode("-", $nl)));
print $en;
[/code]
$nl = "20-12-2023";
$en = implode("-", array_reverse(explode("-", $nl)));
print $en;
[/code]
Geen idee of je een specifieke datumpicker hebt, maar vaak kan je daar ook het formaat aangeven.
Ik weet niet of ze inmiddels allemaal zijn opgelost, daarom ben ik overgegaan op ICU, dat is meer volwassen.
Enige is dat je dan wel de Intl -extentie aan moet zetten (waarom staat dat standaard uit?) in je PHP configuratie.
Vervolgens heb je veel meer controle op hoe je datums geparsed worden en er uit zien:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
// $ids = IntlTimeZone::createTimeZoneIDEnumeration(IntlTimeZone::TYPE_ANY);
// foreach ($ids as $id) { print $id . PHP_EOL; }
$datum = "21-12-2023";
$nl = explode("-", $datum);
if (count($nl) < 3) { die("Incorrecte datumnotatie"); }
$van_locale = "nl_NL";
$naar_locale = "en_GB";
$tijdzone = IntlTimeZone::createTimeZone("Europe/Amsterdam");
$kalender = IntlCalendar::createInstance($tijdzone, $van_locale);
if ($van_locale != $kalender->getLocale(Locale::VALID_LOCALE)) {
die("Instellen locale mislukt"); }
if ($tijdzone != $kalender->getTimeZone()) { die("Instellen tijdzone mislukt"); }
$kalender->clear();
$velden = [
IntlCalendar::FIELD_DAY_OF_MONTH,
IntlCalendar::FIELD_MONTH,
IntlCalendar::FIELD_YEAR];
foreach ($velden as $k => $v) { $kalender->set($v, $nl[$k]); }
$formatter = IntlDateFormatter::create($naar_locale, IntlDateFormatter::FULL,
IntlDateFormatter::FULL, // nee geen bug, zelfde constante voor tijd (?)
$tijdzone, $kalender, "yyyy-MM-dd");
print $formatter->format($kalender);
?>
// $ids = IntlTimeZone::createTimeZoneIDEnumeration(IntlTimeZone::TYPE_ANY);
// foreach ($ids as $id) { print $id . PHP_EOL; }
$datum = "21-12-2023";
$nl = explode("-", $datum);
if (count($nl) < 3) { die("Incorrecte datumnotatie"); }
$van_locale = "nl_NL";
$naar_locale = "en_GB";
$tijdzone = IntlTimeZone::createTimeZone("Europe/Amsterdam");
$kalender = IntlCalendar::createInstance($tijdzone, $van_locale);
if ($van_locale != $kalender->getLocale(Locale::VALID_LOCALE)) {
die("Instellen locale mislukt"); }
if ($tijdzone != $kalender->getTimeZone()) { die("Instellen tijdzone mislukt"); }
$kalender->clear();
$velden = [
IntlCalendar::FIELD_DAY_OF_MONTH,
IntlCalendar::FIELD_MONTH,
IntlCalendar::FIELD_YEAR];
foreach ($velden as $k => $v) { $kalender->set($v, $nl[$k]); }
$formatter = IntlDateFormatter::create($naar_locale, IntlDateFormatter::FULL,
IntlDateFormatter::FULL, // nee geen bug, zelfde constante voor tijd (?)
$tijdzone, $kalender, "yyyy-MM-dd");
print $formatter->format($kalender);
?>
Ad Fundum op 21/12/2023 16:42:08:
Ik heb een pesthekel aan DateTime sinds PHP 4 toen het nooit de goede datums berekende vanwege allerlei bugs.
.....
Lang leve ook de immer heldere documentatie op php.net...
.....
Lang leve ook de immer heldere documentatie op php.net...
Die documentatie stelt dat DateTime geïntroduceerd werd in PHP 5.2.0
Ik kan me dus wel voorstellen dat het niet (goed) werkte in PHP 4.
https://www.php.net/manual/en/class.datetime.php