Gå til innhold

Formatere Dato fra Mysql til annet format i PHP


Anbefalte innlegg

Hei

 

Jeg trenger litt hjelp med formatering av dato fra Mysql.

Jeg har fått koden under til å fungere,  eneste jeg mangler er en måte å vise datoene i et annet format.

Nå vises de som 2015-08-23, jeg henter dem rett ut fra Mysql, hvor de er lagret som Date.

Jeg ønsker å vise dem som 23/8

 

Kan noen av dere hjelpe meg med dette problemet?

Takk for hjelpen.

 

 

 

// Create connection

 $conn = mysqli_connect($servername, $username, $password, $dbname);

mysqli_set_charset($conn,"utf8");

 

 // Check connection

 if (!$conn) {

     die("Connection failed: " . mysqli_connect_error());

}

$sql = "SELECT Dato, Klokkeslett, Type, Taler, Sanger FROM neste10moter";

$result = mysqli_query($conn, $sql);

 

 

if (mysqli_num_rows($result) > 0) {

    // output data of each row

    while($row = mysqli_fetch_assoc($result)) {

        echo $row["Dato"]." ".$row["Klokkeslett"]." ".$row["Type"]." ". $row["Taler"]." ".$row["Sanger"]."<br>";

    }

} else {

    echo "0 results";

}

 

mysqli_close($conn);

 ?>

Lenke til kommentar
Videoannonse
Annonse

Hei,

 

Når du har et date-objekt, så har det ikke lenger så mye med MySQL å gjøre, og du kan bruke PHP-funksjoner på vanlig vis.  Du kan da bruke f.eks .format-metoden, for å selv beskrive formatet du vil ha den i.  Se mer her: http://php.net/manual/en/function.date.php

 

tld

Hei

 

Vil det si at jeg kan formatere datoen i echo linjen? Hvordan vil det da bli hvis jeg ønsker at 2015-08-23 skal bli skrevet som Søndag 23. August?

 

Harald

Lenke til kommentar

Ta en titt på DATE_FORMAT

 

SELECT DATE_FORMAT(dato, '%d/%m/%Y') dato FROM  -- dato = 11/08/2015
SELECT DATE_FORMAT(dato, '%W %d. %M') dato FROM  -- dato = Tuesday 11. August
For å ikke få ukedager og måneder på engelsk må lc_time_names endres: https://dev.mysql.com/doc/refman/5.1/en/locale-support.html

SET lc_time_names = 'no_NO';
I php

$conn = mysqli_connect($servername, $username, $password, $dbname);
mysqli_query($conn, "SET lc_time_names = 'no_NO'");
Når du skal lagre en dato fra tekst er STR_TO_DATE kjekk

 

INSERT INTO tabell (dato)
VALUES (STR_TO_DATE(input_verdi, '%d.%m.%Y %H:%i')    -- input_verdi = 11.08.2015 13:00
Som nevnt over kan du også formatere det i PHP, ta en titt på DateTime

 

$date = new DateTime($row['dato']);

$date->format('l j. F Y'); // Friday 7. August 2015
Vil anbefale å lære deg objekt orientert programmering først som sist Endret av Crowly
Lenke til kommentar

Hei og takk for hjelpen!

 

Nå har jeg fått til å endre format på datoen, men jeg sliter med å få det på norsk.

 

Har prøvd forskjellige ting, men ender alltid opp med englsk.

Kan du si meg hvor jeg skal skrive inn dette?

 

SET lc_time_names = 'no_NO';

 

En annen ting:

 

Jeg har en kode som henter nærmeste dag fra et view i Mysql.

Jeg laget dette viewet i mysql slik at det formaterer datoen slik som dette: Thursday 20. August

Php - koden min er slik:

 
$db_handle = mysql_connect($server, $user_name, $password);
mysql_set_charset("utf8", $db_handle);
$db_found = mysql_select_db($database, $db_handle);
 
if ($db_found) {
 
 
$SQL = "SELECT* FROM nestemotemedinfo";
$result = mysql_query($SQL);
while ( $db_field = mysql_fetch_assoc($result) ) 
{print $db_field['dato'] . "<BR>";}
 
mysql_close($db_handle);
 
}
else {
 
print "Database NOT Found ";
mysql_close($db_handle);
 
}
 
Spørsmålet er, hvordan endre denne koden slik at den viser datoen på norsk?
 
Mvh
Harald
Lenke til kommentar

Ikke bruk mysql_* kommandoene, de er gamle og utdaterte. Bruk mysqli_* eller pdo.

 

Kan du si meg hvor jeg skal skrive inn dette?

 

SET lc_time_names = 'no_NO';

Som eksemplet mitt viser, rett etter at du kobler til databasen. Skal du ha ting på ett annet språk må du be databasen bruke noe annet, eller så må du ta ut ting på en slik måte at det kan formateres i f.eks. PHP, men da må du be PHP bruke norsk

http://php.net/manual/en/function.setlocale.php

setlocale ( LC_TIME , 'nb_NO' ); // alternatit nn_NO for nynorsk
Legges ett sted i begynnelsen av php scriptet.

 

Siste alternativ er å skrive en oversettelses rutine, følgende eksempel er veldig simplet og kun ment for å vise prinsippet

$language = [
    'nb_NO' => [
        'monday' => 'mandag',
        'tuesday' => 'tirsdag'
    ]
];

$weekday = 'monday';
$locale = 'nb_NO';

echo $language[$locale][$weekday]; // mandag
Lenke til kommentar

Har prøvd meg med forskjellige alternativer med setlocale, men får det ikke til.

Hvis jeg skal ta den oversettelsesrutinen videre, forstår jeg det slik at jeg skal legge inn ordene jeg vil oversette i denne listen, og endre print koden min. Kan du vise meg litt nærmere hvor og hva jeg skal skrive i koden min?

Lenke til kommentar

Dette fungerer hos meg:

 

$conn = mysqli_connect($servername, $username, $password, $dbname);
mysqli_query($conn, "SET lc_time_names = 'no_NO'");

$result = mysqli_query($conn, "SELECT DATE_FORMAT(now(), '%a %b %M %W') dato");
$row = mysqli_fetch_assoc($result);

mysqli_free_result($result);

mysqli_close($conn);

echo $row['dato']; // fre aug august fredag
Hvordan ser det ut hos deg hvis du kjører det i ett test skript?

 

Edit:

Gjorde litt grundigere sjekking av dato formatering i PHP. date() og DateTime::format() bryr seg ikke om setlocale(), du må bruke f.eks. strftime(). Du må også sjekke om tegnsettet er tilgjengelig i OSet, på linux gjør du dette med locale -a i terminalen, i lista skal du da se nb_NO.utf8, hvis ikke må den pakken installeres. På f.eks. ubuntu gjøres det slik

sudo apt-get install language-pack-nb
PHP test:

setlocale ( LC_ALL , 'nb_NO.utf8' );

echo strftime("%A %e %B %Y", mktime(0, 0, 0, 12, 22, 1978)); // fredag 22 desember 1978
Endret av Crowly
Lenke til kommentar

Hei

 

echo strftime("%A %e %B %Y", mktime(0, 0, 0, 12, 22, 1978)); // fredag 22 desember 1978

 

Med denne får jeg til å vise fredag 22.desember 1978

Hvordan får jeg den til å vise dataene fra mysql-tabellen min i denne koden?

 

Harald

Lenke til kommentar

Bytt ut mktime() funksjonen med ett timestamp fra databasen. Du kan f.eks. se på strtotime()

$row = mysqli_fetch_assoc($result);
echo strftime("%A %e %B %Y", strtotime($row['dato'])); // f.eks $row['dato'] = '24.08.2015 13:30'

// alternativt hvor du har ett felt for hour, minute, day, month og year i SELECT'en (tungvint, men fungerer)
$row = mysqli_fetch_assoc($result);
echo strftime("%A %e %B %Y", mktime($row['hour'], $row['minute'], 0, $row['month'], $row['day'], $row['year']));
Her må du bare lage litt test kode og se hva du får til å fungere
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...