Php:在date / strftime / strtotime中更改语言

时间:2015-06-03 08:16:56

标签: php date strtotime strftime setlocale

我正在尝试将第二段代码的输出变成荷兰语。 第一个代码给出正确的输出,但是用英语。我试图用荷兰语获得它,但通常我最终得到01-01-1970,2015年12月12日或者什么都没有。 该代码应该在本周的下个星期五给出,除非它在过去的星期一,然后是下周的fridat。

我的工作代码,但是用英文。

<?php
$d = strtotime('today');

switch ($d) {
    case strtotime('monday'):
    case strtotime('friday'):
    case strtotime('saturday'):
    case strtotime('sunday'):
        $ff = strtotime('next friday');
        $ffn = date('l d M', $ff);
        echo $ffn;
    break;
    case strtotime('tuesday'):
    case strtotime('wednesday'):
    case strtotime('thursday'):
        $ff = strtotime('next friday' . '+ 7days');
        $fft = date('l d M', $ff);
        echo $fft;
    break;
    default:
        echo "Something went wrong";
}
?>

我的代码给出荷兰语输出,但错误的日期(它给出了今天的日期,而不是下周五/周五的下周日。)

顺便说一下,这是我在这里问的第一个问题,所以我可能有点模糊或者其他什么;)

3 个答案:

答案 0 :(得分:3)

使用strftime()和set_locale()函数输出日期。如果正确,则无需更改代码逻辑。

  

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

     

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

<?php
$d = strtotime('today');

$format = '%A %d %b';
setlocale(LC_TIME, 'NL_nl');    
setlocale(LC_ALL, 'nl_NL');

switch ($d) {
    case strtotime('monday'):
    case strtotime('friday'):
    case strtotime('saturday'):
    case strtotime('sunday'):
        $ff = strtotime('next friday');
        $ffn = strftime($format, $ff);
        echo $ffn;
    break;
    case strtotime('tuesday'):
    case strtotime('wednesday'):
    case strtotime('thursday'):
        $ff = strtotime('next friday' . '+ 7days');
        $fft = strftime($format, $ff);
        echo $fft;
    break;
    default:
        echo "Something went wrong";
}
?>

答案 1 :(得分:2)

我现在使用str_replace。它(对我来说)是一种简单快捷的方式来获得我需要的输出。但是我现在只编程了近一年,所以我修复它的方式可能不是最好的。但它现在有效(: 感谢回复线程的eveyone!

这就是我现在使用str_replace。

<?php
$d = strtotime('today');
setlocale (LC_TIME,'NL_nl');
ini_set('intl.default_locale', 'nl_NL');
switch ($d) {
    case strtotime('monday'):
    case strtotime('friday'):
    case strtotime('saturday'):
    case strtotime('sunday'):
        $ff = strtotime('next friday');
        $ffn = date('l d F ', $ff);
        $dutch = str_replace (
            array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December', 'Friday'),
            array('Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec', 'Vrijdag'),
            $ffn);
        echo $dutch;
    break;
    case strtotime('tuesday'):
    case strtotime('wednesday'):
    case strtotime('thursday'):
        $ff = strtotime('next friday' . '+ 7days');
        $fft = date('l d F', $ff);
        $dutch = str_replace (
            array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December', 'Friday'),
            array('Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec', 'Vrijdag'),
            $fft);
        echo $dutch;
    break;
    default:
        echo "Something went wrong";
}
?>

答案 2 :(得分:1)

strftime()是唯一的PHP日期&amp;支持本地化的时间功能。

date()strtotime()都只使用英语。

为了帮助您strftime(),您需要先使用setlocale()

不幸的是,setlocale()的第二个参数没有标准化,它的值在某种程度上取决于运行PHP代码的操作系统。

在类Unix系统(Linux,OSX)上,使用:

/* Set locale to Dutch */
setlocale(LC_TIME, 'nl_NL');

/* Output: woensdag  3 juni 2015 */
echo strftime("%A %e %B %Y", strtotime('2015-06-03'));

在Windows上,使用:

/* Set locale to Dutch */
setlocale(LC_TIME, 'nld_nld');

上述代码段是从setlocale()的文档中复制而来的。我更改了日期并测试了第一个示例(在Mac OSX上),但我手头没有Windows系统来检查第二个是否像宣传的那样工作。无论如何,我可以从过去的经验中看出,你需要在Windows上使用的字符串与在类Unix系统上使用的字符串不同。如果您需要在Windows上运行代码,可以在documentation页面的末尾找到有用的链接。