вопрос в увеличении дней-даты

я пытаюсь увеличить дни (60) в м-д-Y, но это неверный день. это считается д-т-у формат.

echo "Today is :: ".date("m-d-Y");
echo "\n";
echo $DateEnd = date('m-d-Y', strtotime(date("m-d-Y") . ' +60 day'));

вывод ::

Today is :: 11-07-2017
End date is :: 09-09-2017

Код: https://3v4l.org/jmT9a

любая помощь или предложение будут оценены

3

Решение

Причина проблемы: — StrToTime () Заметка раздел:-

Даты в форматах m / d / y или d-m-y неоднозначны
в разделитель между различными компонентами: если разделитель является
косая черта (/), тогда предполагается американский м / д / у; тогда как если
разделитель — тире (-) или точка (.), затем европейский формат d-m-y
предполагается. Однако, если год указан в двухзначном формате и
разделитель — тире (- строка даты анализируется как y-m-d.

Такm-d-Y нераспознанный формат при добавлении дней к дате php.

Делай как ниже: —

<?php

echo "Today is :: ".date("m-d-Y");
echo "\n";
echo $DateEnd = date('m-d-Y', strtotime(date("y-m-d") . '+60 days'));

Outpit: —https://eval.in/894300

Также проверить можно Форматы даты Php

3

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

Попробуйте это, это будет работать для вас

<?php

echo "Current Date: ".date("m-d-Y");
echo "\n";
echo $contractDateEnd = date('m-d-Y', strtotime(date("d-m-Y") . ' +60 day'));
?>
2

Вы также можете использовать dateinterval:

var_dump (date_create()->add(date_interval_create_from_date_string('60 days')));

Тест в идеоне

2

Прочитайте примечание от Руководство по PHP:

Замечания:
Даты в форматах m / d / y или d-m-y неоднозначны, если посмотреть на разделитель между различными компонентами: если разделитель является косой чертой (/), то предполагается, что используется американский m / d / y; тогда как если разделителем является тире (-) или точка (.), то предполагается европейский формат d-m-y. Однако, если год указан в двузначном формате, а разделителем является тире (-, строка даты анализируется как y-m-d.
Чтобы избежать двусмысленности, лучше использовать даты ISO 8601 (ГГГГ-ММ-ДД) или DateTime :: createFromFormat (), когда это возможно.

Так что вам нужно использовать

echo date("m-d-Y");
echo "\n";
echo $contractDateEnd = date('m-d-Y', strtotime(date("m/d/Y") . ' +60 day'));

DEMO

1

Есть несколько проблем с вашим кодом: он получает текущее время (число) и форматирует текущую дату как строку, а затем (после того, как он объединяет «+60 день» с ней), он снова анализирует ее как число, просто чтобы снова отформатировать как строку , Много бесполезных и энергоемких операций. И настоящая проблема заключается в пользовательский формат даты вы используете для даты и не поддерживается PHP по уважительным причинам.

Использовать DateTime класс для обработки даты & время операции. Это лучше чем старый date(), strtotime() и другая дата & функции времени Он может обрабатывать несколько часовых поясов, код короче и намного понятнее:

$now = new DateTime();
$end = new DateTime();
$end->add(new DateInterval('P60D'));

echo "Today is :: " . $now->format('m-d-Y') . "\n";
echo "End date is :: " . $end->format('m-d-Y') . "\n";
1
По вопросам рекламы [email protected]