Php: изменить язык в дате / strftime / strtotime

Я пытаюсь получить вывод на моем втором куске кода, чтобы быть голландским.
Первый код дает правильный вывод, но на английском языке. Я пытался получить его на голландском, но обычно я заканчивал с 01-01-1970, 12-12-2015 или ничего.
Код должен давать следующую пятницу на этой неделе, если только не прошедший понедельник, тогда на следующей неделе будет фридат.

Мой рабочий код, но на английском.

<?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";
}
?>

Мой код, который дает голландский вывод, но неправильную дату (он дает сегодняшнюю дату, а не следующую пятницу / пятницу на следующей неделе.)

Кстати, это мой первый вопрос, который я здесь задал, так что я могу быть немного расплывчатым;)

1

Решение

Просто выведите дату, используя функции 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";
}
?>
3

Другие решения

Теперь я использовал str_replace. Это был (для меня) простой и быстрый способ получить нужный мне результат. Но я программирую уже почти год, так что, вероятно, мой способ исправить это был не самый лучший. Но это работает на данный момент (:
Спасибо всем, кто ответил в теме!

Это то, что я получил сейчас, используя 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

strftime() единственная дата PHP & функция времени, которая поддерживает локализацию.

И то и другое 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, вы можете найти полезные ссылки в конце документация стр.

1
По вопросам рекламы [email protected]