Datum omzetten naar Engels voor inserting dbase

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kees Mulder

Kees Mulder

20/12/2023 11:31:57
Quote Anchor link
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?

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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<label for="startDate">Datum inzet</label>
<input id="startDate" class="form-control" type="date" data-date="" data-date-format="DD-MM-YYYY" />
 
PHP hulp

PHP hulp

27/04/2024 07:29:47
 
Jan R

Jan R

20/12/2023 11:48:29
Quote Anchor link
Waarom zou je de datum omzetten in je database. Een date/datetime veld is altijd in het Engels.

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
 
Kees Mulder

Kees Mulder

20/12/2023 11:56:31
Quote Anchor link
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.

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.
 
Adoptive Solution

Adoptive Solution

20/12/2023 12:07:06
Quote Anchor link
Doe dit eens.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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" />
 
Ivo P

Ivo P

20/12/2023 12:14:03
Quote Anchor link
afhandeling van een geposte datum:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php

if ($datum = filter_input(INPUT_POST, 'datumveldform')) {
   $date = new DateTime($datum);
   if ($date) {  // even afvangen als er geen chocola te maken is van de invoer
      $datumstringDB = $date->format('Y-m-d');
   }
}


?>


Overigens is er weinig "Engels" aan die datum. Een Amerikaan zal vandaag noteren als 12/20/2023.
Het is een iso formaat: ISO 8601
 
- Ariën  -
Beheerder

- Ariën -

20/12/2023 12:17:24
Quote Anchor link
Er is een verschil tussen een format en een taal in een datum en tijd.
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 -
 
Ivo P

Ivo P

20/12/2023 13:05:27
Quote Anchor link
Ik haal de datum uit de database in het iso-formaat: ik gebruik dus niet in de query al date_format()

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...
 
Ad Fundum

Ad Fundum

21/12/2023 10:43:01
Quote Anchor link
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$nl
= "20-12-2023";
$en = implode("-", array_reverse(explode("-", $nl)));
print $en;
[
/code]
 
- Ariën  -
Beheerder

- Ariën -

21/12/2023 11:00:08
Quote Anchor link
Geen idee of je een specifieke datumpicker hebt, maar vaak kan je daar ook het formaat aangeven.
 
Ward van der Put
Moderator

Ward van der Put

21/12/2023 11:07:13
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

declare(strict_types=1);

$nl  = '2-3-2023';
$dtm = DateTime::createFromFormat('d-m-Y', $nl);

//> 2023-03-02
$iso = $dtm->format('Y-m-d');

//> March 2, 2023
$en = $dtm->format('F j, Y');  

?>
 
Ad Fundum

Ad Fundum

21/12/2023 16:42:08
Quote Anchor link
Ik heb een pesthekel aan DateTime sinds PHP 4 toen het nooit de goede datums berekende vanwege allerlei bugs.
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)
PHP script in nieuw venster Selecteer het PHP script
1
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);
?>
Lang leve ook de immer heldere documentatie op php.net...
Gewijzigd op 21/12/2023 16:47:15 door Ad Fundum
 
Ivo P

Ivo P

21/12/2023 22:53:11
Quote Anchor link
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...


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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
The DateTime class
(PHP 5 >= 5.2.0, PHP 7, PHP 8)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.