я пытаюсь увеличить дни (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
любая помощь или предложение будут оценены
Причина проблемы: — 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
Попробуйте это, это будет работать для вас
<?php
echo "Current Date: ".date("m-d-Y");
echo "\n";
echo $contractDateEnd = date('m-d-Y', strtotime(date("d-m-Y") . ' +60 day'));
?>
Вы также можете использовать dateinterval:
var_dump (date_create()->add(date_interval_create_from_date_string('60 days')));
Прочитайте примечание от Руководство по 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'));
Есть несколько проблем с вашим кодом: он получает текущее время (число) и форматирует текущую дату как строку, а затем (после того, как он объединяет «+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";