java — получает диапазон дат, используя jQueryUI datepicker и php, на испанском языке

Я пытаюсь сохранить диапазон дат, который будет заполнен пользователем, с помощью 2 сборщиков дат, которые были ранее переведены на испанский язык.

Проблема в том, что когда я использую strtotime() в даты он принимает день за день и наоборот.

Пример:
Я выбираю день 27 месяца 05 и год 2017, но возвращаемое значение является неправильным форматом даты, поскольку месяц равен 27. Если я выберу день 01 месяц 05 года 2017, он будет отображаться в массиве как день 05 месяц 01 и год 2017.

Вот функции, которые я использую, чтобы взять даты из входных текстов и сгенерировать диапазон между датами

function takedates() {
if(isset($_POST['repS'])){
$dateStart = $_POST['txtdesde'];
$dateEnd = $_POST['txthasta'];
$fechaArray = generafechas($dateStart,$dateEnd);
}

function generafechas($date1,$date2){
$fecharray = array();
if (is_string($date1) === true){
$deit1 = strftime("%d-%m-%Y",strtotime($date1));
}
if (is_string($date2) === true){
$date2 = strftime("%d-%m-%Y",strtotime($date2));
}
do {
$fecharray[] = date("m-d-Y", $date1);
$date1 = strtotime("+1 day", $date1);
} while($date1 <= $date2);
return $fecharray;
}
?>

Мой вопрос: как мне заполнить массив датами в испанском формате даты?

PS: я уже использовал setLocale(LC_TIME,'es_ES') в файле, где я использую эти функции, а на входе отображаются такие даты, как «дд / мм / гггг»

1

Решение

strtotime не учитывает ваш языковой стандарт при разборе строки datetime. Если вы используете дату, разделенную косой чертой, она считается в американском стиле m/d/y, Если вы используете дату, разделенную точками (или тире, если год состоит из четырех цифр), предполагается, что это стиль в остальном мире (d.m.y или же d-m-Y). (Обратите внимание, что если вы используете только двузначный год и используете тире, PHP попытается проанализировать его как y-m-d.)

Вместо strtotime, вы должны использовать date-create-from-format / DateTime::createFromFormat чтобы получить DateTime объект, а затем построить вашу строку даты из этого.

ОБНОВЛЕНИЕ НА ОСНОВЕ КОММЕНТАРИЙ: Чтобы получить желаемый результат, вы должны использовать intl обслуживания внутреннего IntlDateFormatter учебный класс сделать вывод.

Чтобы изменить код выше (не проверено):

function generafechas($date1,$date2){
$fecharray = array();

if (is_string($date1) && is_string($date2)){
// These lines assume the input is formatted `day-month-year`,
// with 2-digit day and month, and 4-digit year.
$date1 = DateTime::createFromFormat('d-m-Y', $date1)
$date2 = DateTime::createFromFormat('d-m-Y', $date2)
} else {
throw new InvalidArgumentException('Must provide two date strings');
}

// Create the formatter
$formatter = IntlDateFormatter::create('es_ES', null, null, null, null, "d 'de' MMMM 'del' yyyy");

do {
// This line prints the first date in the format you chose above
$fecharray[] = $formatter->format($date1);
$date1->add(new DateInterval("P1D")); // `P1D` means "Duration of 1 Day" in the ISO 8601 standard
} while($date1 <= $date2);

return $fecharray;
}

Если вы предоставляете Locale вместе с данными, вы можете изменить формат строки, которая используется в createFromFormat по мере необходимости.

0

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

Других решений пока нет …

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