Avatar billede Mik2000 Professor
22. juni 2006 - 23:41 Der er 9 kommentarer og
1 løsning

Dansk måned og dag i stedet for engelsk

Hej eksperter

Jeg har hentet et booking system som jeg synes er smart men der er et problem. Det bruger engelske månedsnavne og dag navne.

Selve filen hvor tid og dato styres ses under den stiplede linje.

Hvordan får jeg den til at skrive danske måneder og danske navne på dage.
Den benytter date("l") og date("F") til at få de engelske.
Har kigget på om det måske er setlocale jeg skal bruge men synes ikke jeg kan se hvordan den virker.

Så hvordan får jeg den til at benytte danske dag og månedsnavne?

--------------------------------------------------------------

// Define Current & Selected Date Constants

// Today's Date Data
  $tmp_todays_dates = date("j M Y|l j F, Y");
  list($tmp_today, $tmp_shortstr, $tmp_longstr) = explode("|", $tmp_todays_dates);
  define('TODAYS_DATE', $tmp_today);      // YYYY-MM-DD
  list($tmp_year, $tmp_month, $tmp_day) = explode("-", $tmp_today);
  define('TODAYS_DATE_YEAR', $tmp_year);    // 4 Digit
  define('TODAYS_DATE_MONTH', $tmp_month); // 2 Digit
  define('TODAYS_DATE_DAY', $tmp_day);    // 2 Digit
  define('TODAYS_DATE_SHORTSTR', $tmp_shortstr);  // 21 Mar 2003
  define('TODAYS_DATE_LONGSTR', $tmp_longstr);    // Saturday January 25, 2003

// Selected Date Data

  @list($sel_year, $sel_month, $sel_day) = explode("-", $_REQUEST['date']);
  if (!checkdate($sel_month+0, $sel_day+0, $sel_year+0)) {
        $_REQUEST['date'] = TODAYS_DATE;
        list($sel_year, $sel_month, $sel_day) = explode("-", $_REQUEST['date']);
  }
  if (strlen($sel_year) == 2 && $sel_year <= 69) { $sel_year += 2000; }
  define('SELECTED_DATE_YEAR', sprintf("%04d", $sel_year));
  define('SELECTED_DATE_MONTH', sprintf("%02d", $sel_month));
  define('SELECTED_DATE_DAY', sprintf("%02d", $sel_day));
  define('SELECTED_DATE', SELECTED_DATE_YEAR . '-' . SELECTED_DATE_MONTH . '-' . SELECTED_DATE_DAY);
  $_REQUEST['date'] = SELECTED_DATE;
 

  $tmp_todays_dates = date("j M Y|l j F, Y", mktime(1, 0, 0, SELECTED_DATE_MONTH, SELECTED_DATE_DAY, SELECTED_DATE_YEAR));
  list($tmp_shortstr, $tmp_longstr) = explode("|", $tmp_todays_dates);
  define('SELECTED_DATE_SHORTSTR', $tmp_shortstr);  // 21 Mar 2003
  define('SELECTED_DATE_LONGSTR', $tmp_longstr);    // Saturday, January 25, 2003

// Selected Date Data - Previous/Next Day, Month, & Year Data

  define('PREVIOUS_DAY_DATE', add_delta_ymd(SELECTED_DATE, 0, 0, -1));
  define('NEXT_DAY_DATE', add_delta_ymd(SELECTED_DATE, 0, 0, 1));
  define('PREVIOUS_MONTH_DATE', add_delta_ymd(SELECTED_DATE, 0, -1, 0));
  define('NEXT_MONTH_DATE', add_delta_ymd(SELECTED_DATE, 0, 1, 0));
  define('PREVIOUS_YEAR_DATE', add_delta_ymd(SELECTED_DATE, -1, 0, 0));
  define('NEXT_YEAR_DATE', add_delta_ymd(SELECTED_DATE, 1, 0, 0));

// Create the schedule table data for the selected month date (year and month).
  include_once("booking_db_fns.php");
  $res = create_date_time_schedule_data(SELECTED_DATE, $_REQUEST['loc']);

?>
Avatar billede whatever Nybegynder
22. juni 2006 - 23:50 #1
Så vidt er date() ikke afhængig af setlocale, hvilket betyder at du ikke får danske dage  og måneder ud i din kalender.

I stedet kan du gøre det, at du ændrer date() til strftime(). Sidst nævnte læner sig op ad setlocale, så du kan få danske dage og måneder ud.

Se mere på http://dk.php.net/manual/da/function.strftime.php
Avatar billede Mik2000 Professor
22. juni 2006 - 23:55 #2
Men der står:
Month and weekday names and other language dependent strings respect the current locale set with setlocale().

Hvordan gør jeg så det?
For bruger jeg f.eks. bare echo strftime("%A"); så skriver den Thursday
Avatar billede esbenp Nybegynder
23. juni 2006 - 00:57 #3
Det er også rimligt nemt at implementere selv:

$names = array("søndag", "mandag", "tirsdag"); //Osv

$d = getdate();
print("I dag er det " . $names[$d['wday']]);
Avatar billede Mik2000 Professor
23. juni 2006 - 01:33 #4
Hmm lyder meget enkelt, men lidt svært at komme igang i forhold til ovensående.....

Kan du evt hjælpe mig lidt igang så jeg forstår det?
Skriver lige arrays så du ikke skal spilde tid på det.
$dag = array("Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag");

$maned = array("Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December");

På forhånd tak
Avatar billede tobias_louv Nybegynder
23. juni 2006 - 01:43 #5
echo $dag[date("w")];
echo $maaned[date("n")];

det er vel det ^^

men kig også på http://php.net/
(http://dk2.php.net/manual/da/function.date.php)

MVH
/Louv
Avatar billede Mik2000 Professor
23. juni 2006 - 03:20 #6
Mente mere med at komme igang i denne fil ;):
// Define Current & Selected Date Constants

// Today's Date Data
  $tmp_todays_dates = date("j M Y|l j F, Y");
  list($tmp_today, $tmp_shortstr, $tmp_longstr) = explode("|", $tmp_todays_dates);
  define('TODAYS_DATE', $tmp_today);      // YYYY-MM-DD
  list($tmp_year, $tmp_month, $tmp_day) = explode("-", $tmp_today);
  define('TODAYS_DATE_YEAR', $tmp_year);    // 4 Digit
  define('TODAYS_DATE_MONTH', $tmp_month); // 2 Digit
  define('TODAYS_DATE_DAY', $tmp_day);    // 2 Digit
  define('TODAYS_DATE_SHORTSTR', $tmp_shortstr);  // 21 Mar 2003
  define('TODAYS_DATE_LONGSTR', $tmp_longstr);    // Saturday January 25, 2003

// Selected Date Data

  @list($sel_year, $sel_month, $sel_day) = explode("-", $_REQUEST['date']);
  if (!checkdate($sel_month+0, $sel_day+0, $sel_year+0)) {
        $_REQUEST['date'] = TODAYS_DATE;
        list($sel_year, $sel_month, $sel_day) = explode("-", $_REQUEST['date']);
  }
  if (strlen($sel_year) == 2 && $sel_year <= 69) { $sel_year += 2000; }
  define('SELECTED_DATE_YEAR', sprintf("%04d", $sel_year));
  define('SELECTED_DATE_MONTH', sprintf("%02d", $sel_month));
  define('SELECTED_DATE_DAY', sprintf("%02d", $sel_day));
  define('SELECTED_DATE', SELECTED_DATE_YEAR . '-' . SELECTED_DATE_MONTH . '-' . SELECTED_DATE_DAY);
  $_REQUEST['date'] = SELECTED_DATE;
 

  $tmp_todays_dates = date("j M Y|l j F, Y", mktime(1, 0, 0, SELECTED_DATE_MONTH, SELECTED_DATE_DAY, SELECTED_DATE_YEAR));
  list($tmp_shortstr, $tmp_longstr) = explode("|", $tmp_todays_dates);
  define('SELECTED_DATE_SHORTSTR', $tmp_shortstr);  // 21 Mar 2003
  define('SELECTED_DATE_LONGSTR', $tmp_longstr);    // Saturday, January 25, 2003

// Selected Date Data - Previous/Next Day, Month, & Year Data

  define('PREVIOUS_DAY_DATE', add_delta_ymd(SELECTED_DATE, 0, 0, -1));
  define('NEXT_DAY_DATE', add_delta_ymd(SELECTED_DATE, 0, 0, 1));
  define('PREVIOUS_MONTH_DATE', add_delta_ymd(SELECTED_DATE, 0, -1, 0));
  define('NEXT_MONTH_DATE', add_delta_ymd(SELECTED_DATE, 0, 1, 0));
  define('PREVIOUS_YEAR_DATE', add_delta_ymd(SELECTED_DATE, -1, 0, 0));
  define('NEXT_YEAR_DATE', add_delta_ymd(SELECTED_DATE, 1, 0, 0));

// Create the schedule table data for the selected month date (year and month).
  include_once("booking_db_fns.php");
  $res = create_date_time_schedule_data(SELECTED_DATE, $_REQUEST['loc']);

?>
Avatar billede tobias_louv Nybegynder
23. juni 2006 - 12:47 #7
Så tror jeg at jeg står af... Det er over er år siden jeg har arbejdet med php, og jeg er desuden ikke alt for god... ;-)
Det var bare om du kunne bruge den smule der :-)

MVH
/Louv
Avatar billede jakobdo Ekspert
24. juni 2006 - 17:08 #8
Løsningen er:

setlocale(LC_TIME, 'da');
$tmp_todays_dates = strftime("%Y-%m-%d|%d %b %Y|%A %B %d, %Y");
$tmp_todays_dates = strftime("%d %b %Y|%A %B %d, %Y", mktime(1, 0, 0, SELECTED_DATE_MONTH, SELECTED_DATE_DAY, SELECTED_DATE_YEAR));

Og date skal rettes til strftime() flere steder.
Og et svar!
Avatar billede Mik2000 Professor
24. juni 2006 - 17:09 #9
Takker for hjælpen over messenger jakobdo :)
Avatar billede jakobdo Ekspert
24. juni 2006 - 17:10 #10
Selv tak, og tak for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester