[php] Datum omzetten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben momenteel aan het proberen een datum om te zetten en deze in een database te plaatsen.

De datum wordt in gevoerd op de volgende manier: DD-MM-YYYY, maar deze wil ik in de database zetten als YYYY-MM-DD. En uitlezen moet op sommige plaatsen omgekeerd.

Ik maak gebruik van SQL Server en het veld waar het om gaat is een CHAR veld

Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
$datarray = explode("-", $date);

$newdate = $datarray[2].$datarray[1].$datarray[0];


:)

[ Voor 8% gewijzigd door Verwijderd op 03-03-2004 16:12 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Als je nou je topic titel eens had ingevuld in de zoekbox in plaats van in het veldje voor de topic titel dan had je je antwoord waarschijnlijk al gehad... Kijk maar hier: [PHP] Datum omzetten

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Lizard
  • Registratie: Februari 2000
  • Laatst online: 21-09 17:24
Om een standaarddatum op te halen gebruik ik dit:

PHP:
1
$result = mysql_query("SELECT *, DATE_FORMAT(datum, '%d-%m-%Y') AS datum2 FROM tabel",$db);


In die db is datum een veld met type date, lijkt me de makkelijkste oplossing als je mysql gebruikt.

Moet je zelf nog wel even voor de omzetting zorgen bij het inserten.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Had het helaas niet ik de search kunnen vinden, maar in ieder geval bedankt.
Werkt nu namelijk goed met een kleine aanpassing.

Enige waar is nu nog mee bezig ben is invoer beveiliging, wil namelijk dat er een test wordt gedaan of het in de vorm is van %%-%%-%%%%

Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

dan mag 45-33-0000 ook :? :P

[ Voor 6% gewijzigd door TheRookie op 03-03-2004 16:47 . Reden: + :P ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Gebruik preg_match.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Als je het zo bekijkt wel ja.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op 03 maart 2004 @ 16:41:
Als je het zo bekijkt wel ja. 8)7
Nope, kijk maar: checkdate

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

dát zei ie niet ;)
Ik had bij m'n vorige post trouwens nog een :P moeten zetten :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

TheRookie schreef op 03 maart 2004 @ 16:46:
dát zei ie niet ;)
Ik had bij m'n vorige post trouwens nog een :P moeten zetten :)
Als je die checkdate fatsoenlijk gebruikt dan kan zoiets als 45-33-0000 niet meer...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Die functie checkdate werkt goed, maar heb geen functie kunnen vinden om de tijd te controleren.

Dat moet dan met een zoiets zeker:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
$timearray = explode(":", $time); 

$uren = array("00", "01", "02", ... ..., "23");
$minuten = array ("00", "01", "02", ... ..., "59");

if (in_array($timearray[0], $uren)  AND (in_array($timearray[1], $minuten))
{ 
    $newdate = $timearray[0].":".$timerray[1];
}
else
{
$errorMsg = "... ...";
}
?>

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 03 maart 2004 @ 19:44:
Die functie checkdate werkt goed, maar heb geen functie kunnen vinden om de tijd te controleren.
Note: The valid range of a timestamp is typically from Fri, 13 Dec 1901 20:45:54 GMT to Tue, 19 Jan 2038 03:14:07 GMT. (These are the dates that correspond to the minimum and maximum values for a 32-bit signed integer.) Additionally, not all platforms support negative timestamps, therefore your date range may be limited to no earlier than the Unix epoch. This means that e.g. dates prior to Jan 1, 1970 will not work on Windows, some Linux distributions, and a few other operating systems.
8)
Verwijderd schreef op 03 maart 2004 @ 19:44:
Die functie checkdate werkt goed, maar heb geen functie kunnen vinden om de tijd te controleren.

Dat moet dan met een zoiets zeker:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
$timearray = explode(":", $time); 

$uren = array("00", "01", "02", ... ..., "23");
$minuten = array ("00", "01", "02", ... ..., "59");

if (in_array($timearray[0], $uren)  AND (in_array($timearray[1], $minuten))
{ 
    $newdate = $timearray[0].":".$timerray[1];
}
else
{
$errorMsg = "... ...";
}
?>
Met een beetje systematisch werken zou je op zoiets terecht kunnen komen (als je geen gebruik maakt van reguliere expressies):

pseudo code
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$istimeok = false;

$timearray = explode(":", $time); 
if (array_length($timearray)  == 2)
{ if ((is_numeric($timearray[0]) && (is_numeric($timearray[1]))
  { if ((intval($timearray[0] >= 0)) && (intval($timearray[0]) <= 23)) &&
        (intval($timearray[1] >= 0)) && (intval($timearray[0]) <= 59)))
     { $istimeok = true;
     }
  }
}

if ($istimeok == true)
{  $newtime = sprintf("%02d:%02d", $timearray[0], $timearray[1]);
}
else
{ echo 'niet ok';
}

[ Voor 53% gewijzigd door Verwijderd op 03-03-2004 20:11 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 03 maart 2004 @ 19:59:

Note: The valid range of a timestamp is typically from Fri, 13 Dec 1901 20:45:54 GMT to Tue, 19 Jan 2038 03:14:07 GMT. (These are the dates that correspond to the minimum and maximum values for a 32-bit signed integer.) Additionally, not all platforms support negative timestamps, therefore your date range may be limited to no earlier than the Unix epoch. This means that e.g. dates prior to Jan 1, 1970 will not work on Windows, some Linux distributions, and a few other operating systems.
8)

Met een beetje systematisch werken zou je op zoiets terecht kunnen komen (als je geen gebruik maakt van reguliere expressies):
Ik heb het vaak niet zo op van de reguliere expressies, vooral bij datum en tijd, dus gebruik in zo een geval liever een kleine omweg.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Met de tijdfunctie heb ik nog wat problemen, hij gaat namelijk over de zeik wanneer er bijvoorbeeld een "a" tussen staat.


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
$productie_tijd_ok = '2';
$timearray = explode(":", $productie_tijd); // undefined offset <<<<<<<<<<<<<
if (($timearray[0] != '') && ($timearray[1] != ''))
{ 
   if ((is_numeric($timearray[0])) && (is_numeric($timearray[1])))
   { 
      if ((intval($timearray[0]) >= 0) && (intval($timearray[0]) <= 23) && 
         (intval($timearray[1]) >= 0) && (intval($timearray[1]) <= 59))
      { 
         $productie_tijd_ok = '1';
      }
   }
}


hetzelfde heb ik trouwens bij de datum

[ Voor 36% gewijzigd door Verwijderd op 04-03-2004 12:24 ]


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Wat ook nog kan is
PHP:
1
2
3
4
// $date heeft vorm yy-mm-dd of yyyy-mm-dd 
$date_parts = explode("-", $date);
$convertedDate = date("d-m-Y", mktime(0, 0, 0, $date_parts[1], 
                                $date_parts[2], $date_parts[0]));

Je kan nu de 'd-m-Y' door van alles en nog wat vervangen (zie date() voor mogelijkheden; dit voorbeeld komt overigens vrijwel rechtstreeks uit de beschrijving van die functie) en volgens mij zijn die mogelijkheden iets uitgebreider dan die van bijvoorbeeld MySQL.

[ Voor 11% gewijzigd door Confusion op 04-03-2004 13:52 ]

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
voor tijd invoer bewaking heb in nu het volgende:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
if ($productie_tijd == '')
{
   $errorMsg = $errorMsg."- Het veld \"Productietijd\" is niet ingevuld.<br>";
}
elseif ($productie_tijd != '')
{
   if(ereg("([0-9]):([0-9])", $productie_tijd)) 
   {
      $productie_tijd_ok = false;
      $timearray = explode(":", $productie_tijd); 
      if (($timearray[0] != '') && ($timearray[1] != ''))
      { 
         if ((is_numeric($timearray[0])) && (is_numeric($timearray[1])))
         { 
            if ((intval($timearray[0]) >= 0) && (intval($timearray[0]) <= 23) && 
            (intval($timearray[1]) >= 0) && (intval($timearray[1]) <= 59))
            { 
    $productie_tijd_ok = true;
            }
         }
      }
      if ($productie_tijd_ok == true)
      {  
         $productie_tijd = sprintf("%02d:%02d", $timearray[0], $timearray[1]);
      }
      else
      { 
         $errorMsg = $errorMsg."- Het veld \"Productietijd\" bevat geen geldige tijd.<br>";
      }
   }
   else 
   {
      $errorMsg = $errorMsg."- Het veld \"Productietijd\" bevat letters of niet
      toegestane karakters.<br>";
   }
}


Het werkt allemaal perfect ook met leestekens enzo.

[ Voor 11% gewijzigd door Verwijderd op 04-03-2004 15:02 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben toch nog tegen een klein probleempje aangelopen bij datum. wanneer een datum namelijk in wordt gevoerd op de volgende manier: 8-3-2004 wil ik dat er automatisch 08-03-2004 van wordt gemaakt.

Met de onderstaande code gaat dat wel goed, maar veranderd 08-03-2004 ook naar: 008-003-2004.

code:
1
2
3
4
5
6
7
8
9
10
11
12
if(ereg("([0-9])+-([0-9])+-([0-9])", $_POST['datum_uitgeschreven']))
{
   $datarray = explode("-", $_POST['datum_uitgeschreven']); 
   if (checkdate($datarray[1], $datarray[0], $datarray[2]) == true)
   {
      if ((intval($datarray[0]) >= 1) && (intval($datarray[0]) <= 9))
         { $datarray[0] = ("0". $datarray[0]); }
      if ((intval($datarray[1]) >= 1) && (intval($datarray[1]) <= 9))
         { $datarray[1] = ("0". $datarray[1]); }
      $datum_uitgeschreven = $datarray[2]."-".$datarray[1]."-".$datarray[0];
   }
}

Acties:
  • 0 Henk 'm!

  • cavey
  • Registratie: Augustus 2000
  • Laatst online: 29-05 01:29
eh, checken of de strlen van je exploded stukjes 1 of 2 is ;)

maar zat er trouwens niet in php ook nog een standaard functie om die datum dingen te padden met zero's?

[ Voor 47% gewijzigd door cavey op 09-03-2004 15:41 ]

Pagina: 1