[PHP] locales problemen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
Ik heb de volgende functie, die geinclude wordt waar nodig. Volgens is deze goed.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
// functie voor datum conversie
// 0000-00-00 formaat in, geschreven datum uit
function geefNederlandseEinddatum($begindatum)
{
    // datum / tijd op Nederlands zetten
    setlocale(LC_ALL, 'nl_NL')
    if ($begindatum != "0000-00-00")
    {
        list($year, $month, $day) = split('[/.-]', $begindatum);
        $timestamp = mktime($hours,$minutes,$seconds,$month,$day,$year);
        return strftime('%e %B %Y',$timestamp);
    }
    else 
    {
        return "Niet bekend";
    }
}
?>


Ik heb een beetje rondgekeken, verschillende suggesties geprobeerd die werden geopperd bij andere mensen met dezelfde problemen. Niets hielp.

Wel krijg ik het volgende als ik locale | less gebruik:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
LANG=POSIX
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
~
~
~
~


Niet genoeg, volgens mij.

Moet ik het zoeken in het installeren van de locale op serverniveau, of zit er toch nog ergens een fout in het script:?

iOS developer


Acties:
  • 0 Henk 'm!

  • megamuch
  • Registratie: Februari 2001
  • Laatst online: 08-12-2024

megamuch

Tring Tring!

Bikkelz, ik snap je vraag niet. Of iig, niet wat er nu gebeurt en wat er zou moeten gebeuren.

Verstand van Voip? Ik heb een leuke baan voor je!


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Je verhaal is idd niet te begrijpen. Geef eens aan wat er fout gaat. Verder is het misschien ook handig om eens te kijken naar de functie strtotime. Dan kun je namelijk dit doen:
PHP:
1
strftime('%e %B %Y', strtotime($begindatum));

Scheelt je weer een paar regels.

Variabelen $hours, $minutes en $seconds komen ook nergens vandaan trouwens.

[ Voor 13% gewijzigd door Michali op 06-03-2006 12:42 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • sQuarecoW
  • Registratie: Juli 2003
  • Laatst online: 19-09 18:07
Als het een windows bak is waar je php op draait, dan moet je nog wat toevoegen:
PHP:
1
setlocale(LC_ALL, 'nl_NL', 'nld_nld')

[ Voor 11% gewijzigd door sQuarecoW op 06-03-2006 12:49 ]


Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
megamuch schreef op maandag 06 maart 2006 @ 12:36:
Bikkelz, ik snap je vraag niet. Of iig, niet wat er nu gebeurt en wat er zou moeten gebeuren.
Sorry, je hebt gelijk.

Het is zo dat ik altijd een Engelstalige datum terug krijg van deze functie, in plaats van een Nederlandse.
sQuarecoW schreef op maandag 06 maart 2006 @ 12:49:
Als het een windows bak is waar je php op draait, dan moet je nog wat toevoegen:
PHP:
1
setlocale(LC_ALL, 'nl_NL', 'nld_nld')
Het is Linux.

[ Voor 29% gewijzigd door BikkelZ op 06-03-2006 13:02 ]

iOS developer


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Weet je zeker dat de betreffende locale geïnstalleerd staat op die bak?

'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!

  • xces
  • Registratie: Juli 2001
  • Laatst online: 20-09 16:56

xces

To got or not to got..

Je moet locales niet vertrouwen, d.w.z. er zijn verschillende benamingen voor op verschillende "dozen". Zelf gebruik ik de volgende functie ervoor, ik werk nl toch alleen met Nederlands.

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
    /**
     * Nederlandse datum: nlDate('l d F Y o\m H:i:s') geeft "vrijdag 23 september 2005 om 16:10:17"
     * @param string format
     * @param long timestamp
     */
    function nlDate($strFormat, $lngTimestamp=null) {
        if ($lngTimestamp == null) {
            $lngTimestamp = time();
        }

        //
        // Tijd ophalen
        $intWeek = date('w', $lngTimestamp);
        $intMonth = date('n', $lngTimestamp) - 1;

        //
        // Constanten
        $arrWeekL = array('zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag');
        $arrWeekS = array('zo', 'ma', 'di', 'wo', 'do', 'vr', 'za');
        $arrMonthL = array('januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december');
        $arrMonthS = array('jan', 'feb', 'mar', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec');

        preg_match_all('/[\\\]*[a-zA-Z]/', $strFormat, $arrChars);
        for($i=0; $i < count($arrChars[0]); $i++) {
            switch ($arrChars[0][$i]) {
                case 'F':
                    $arrChars[1][$i] = $arrMonthL[$intMonth];
                    break;
                case 'M':
                    $arrChars[1][$i] = $arrMonthS[$intMonth];
                    break;
                case 'l':
                    $arrChars[1][$i] = $arrWeekL[$intWeek];
                    break;
                case 'D':
                    $arrChars[1][$i] = $arrWeekS[$intWeek];
                    break;
                default:
                    $arrChars[1][$i] = date($arrChars[0][$i], $lngTimestamp);
            }
        }

        $i = 0;
        return preg_replace('/[\\\]*[a-zA-Z]/e', "\$arrChars[1][\$i++]", $strFormat);
    }

Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
-NMe- schreef op maandag 06 maart 2006 @ 14:02:
Weet je zeker dat de betreffende locale geïnstalleerd staat op die bak?
Ik vraag het me af. Ben niet zo'n Linux-held. Dit staat in de map locales:

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
/usr/share/i18n/locales# dir
POSIX  bn_BD       en_GB       es_PA       gd_GB        lv_LV       sl_SI                  translit_narrow
af_ZA  bn_IN       en_HK       es_PE       gl_ES        mi_NZ       sq_AL                  translit_neutral
am_ET  br_FR       en_IE       es_PR       gl_ES@euro   mk_MK       sr_YU                  translit_small
an_ES  br_FR@euro  en_IE@euro  es_PY       gv_GB        ml_IN       sr_YU@cyrillic         translit_wide
ar_AE  bs_BA       en_IN       es_SV       he_IL        mn_MN       st_ZA                  tt_RU
ar_BH  ca_ES       en_NZ       es_US       hi_IN        mr_IN       sv_FI                  uk_UA
ar_DZ  ca_ES@euro  en_PH       es_UY       hr_HR        ms_MY       sv_FI@euro             ur_PK
ar_EG  cs_CZ       en_SG       es_VE       hu_HU        mt_MT       sv_SE                  uz_UZ
ar_IN  cy_GB       en_US       et_EE       hy_AM        nb_NO       ta_IN                  vi_VN
ar_IQ  da_DK       en_ZA       eu_ES       i18n         nl_BE       te_IN                  wa_BE
ar_JO  de_AT       en_ZW       eu_ES@euro  id_ID        nl_BE@euro  tg_TJ                  wa_BE@euro
ar_KW  de_AT@euro  eo_EO       fa_IR       is_IS        nl_NL       th_TH                  xh_ZA
ar_LB  de_BE       es_AR       fi_FI       iso14651_t1  nl_NL@euro  ti_ER                  yi_US
ar_LY  de_BE@euro  es_BO       fi_FI@euro  it_CH        nn_NO       ti_ET                  zh_CN
ar_MA  de_CH       es_CL       fo_FO       it_IT        no_NO       tl_PH                  zh_HK
ar_OM  de_DE       es_CO       fr_BE       it_IT@euro   oc_FR       tr_TR                  zh_SG
ar_QA  de_DE@euro  es_CR       fr_BE@euro  iw_IL        pl_PL       translit_circle        zh_TW
ar_SA  de_LU       es_DO       fr_CA       ja_JP        pt_BR       translit_cjk_compat    zu_ZA
ar_SD  de_LU@euro  es_EC       fr_CH       ka_GE        pt_PT       translit_cjk_variants
ar_SY  el_GR       es_ES       fr_FR       kl_GL        pt_PT@euro  translit_combining
ar_TN  el_GR@euro  es_ES@euro  fr_FR@euro  ko_KR        ro_RO       translit_compat
ar_YE  en_AU       es_GT       fr_LU       kw_GB        ru_RU       translit_et
az_AZ  en_BW       es_HN       fr_LU@euro  lo_LA        ru_UA       translit_font
be_BY  en_CA       es_MX       ga_IE       lt_LT        se_NO       translit_fraction
bg_BG  en_DK       es_NI       ga_IE@euro  lug_UG       sk_SK       translit_hangul


Ziet er op zich wel compleet uit, maar dat locale commando gaf weer aan dat er alleen POSIX draaide?

iOS developer


Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
xces schreef op maandag 06 maart 2006 @ 14:10:
Je moet locales niet vertrouwen, d.w.z. er zijn verschillende benamingen voor op verschillende "dozen". Zelf gebruik ik de volgende functie ervoor, ik werk nl toch alleen met Nederlands.

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
    /**
     * Nederlandse datum: nlDate('l d F Y o\m H:i:s') geeft "vrijdag 23 september 2005 om 16:10:17"
     * @param string format
     * @param long timestamp
     */
    function nlDate($strFormat, $lngTimestamp=null) {
        if ($lngTimestamp == null) {
            $lngTimestamp = time();
        }

        //
        // Tijd ophalen
        $intWeek = date('w', $lngTimestamp);
        $intMonth = date('n', $lngTimestamp) - 1;

        //
        // Constanten
        $arrWeekL = array('zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag');
        $arrWeekS = array('zo', 'ma', 'di', 'wo', 'do', 'vr', 'za');
        $arrMonthL = array('januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december');
        $arrMonthS = array('jan', 'feb', 'mar', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec');

        preg_match_all('/[\\\]*[a-zA-Z]/', $strFormat, $arrChars);
        for($i=0; $i < count($arrChars[0]); $i++) {
            switch ($arrChars[0][$i]) {
                case 'F':
                    $arrChars[1][$i] = $arrMonthL[$intMonth];
                    break;
                case 'M':
                    $arrChars[1][$i] = $arrMonthS[$intMonth];
                    break;
                case 'l':
                    $arrChars[1][$i] = $arrWeekL[$intWeek];
                    break;
                case 'D':
                    $arrChars[1][$i] = $arrWeekS[$intWeek];
                    break;
                default:
                    $arrChars[1][$i] = date($arrChars[0][$i], $lngTimestamp);
            }
        }

        $i = 0;
        return preg_replace('/[\\\]*[a-zA-Z]/e', "\$arrChars[1][\$i++]", $strFormat);
    }
Ik denk dat dit een wat minder elegante maar wel de meest praktische oplossing is. Gewoon niets aan toeval over laten.

iOS developer


Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
Solved.

iOS developer


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Misschien handig, voor de personen die met een soortgelijk probleem zitten, om dan ook de oplossing te posten. Heb je nu gebruik van deze functie gemaakt of lag het ergens anders aan?

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
Michali schreef op maandag 06 maart 2006 @ 18:21:
Misschien handig, voor de personen die met een soortgelijk probleem zitten, om dan ook de oplossing te posten. Heb je nu gebruik van deze functie gemaakt of lag het ergens anders aan?
Ik durf het bijna niet te zeggen.....maar de fout zat in een andere include :|

iOS developer


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Het kan altijd voorkomen dat je ergens gewoon helemaal overheen kijkt. Soms zit een oplossing in een hoek waar je het totaal niet verwacht. Af en toe is deze smilie heel toepasselijk 8)7

;)

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

BikkelZ schreef op dinsdag 07 maart 2006 @ 15:44:
Ik durf het bijna niet te zeggen.....maar de fout zat in een andere include :|
Kun je dan alsnog even zeggen wat de fout precies was in verband met de waarde die dit topic voor de search kan hebben? :)

'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!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
-NMe- schreef op dinsdag 07 maart 2006 @ 15:52:
[...]

Kun je dan alsnog even zeggen wat de fout precies was in verband met de waarde die dit topic voor de search kan hebben? :)
Het bleek dus dat de code uit mijn startpost gewoon werkt :)

[ Voor 3% gewijzigd door BikkelZ op 08-03-2006 15:15 ]

iOS developer

Pagina: 1