Strtotime() не работает с форматом dd/mm/YYYY



мне очень нравится , но инструкция не дает полного описания поддерживаемых форматов даты. strtotime('dd/mm/YYYY') не работает, он работает только с .



если у меня есть дата в dd/mm/YYYY формат, как я могу конвертировать его в YYYY-mm-dd?
Я могу сделать это с помощью

351   14  
PHP

14 ответов:

вот упрощенное решение:

$date = '25/05/2010';
$date = str_replace('/', '-', $date);
echo date('Y-m-d', strtotime($date));

результат:

2010-05-25

The strtotime документация гласит:

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

вы можете анализировать даты из пользовательского формата (начиная с PHP 5.3) с помощью DateTime:: createFromFormat

$timestamp = DateTime::createFromFormat('!d/m/Y', '23/05/2010')->getTimestamp();

(В Сторону: The ! используется для сброса не указанных значений в метку времени Unix, т. е. время будет полночь.)


если вы не хотите (или не можете) использовать PHP 5.3, то полный список доступных форматов даты / времени, которые принимает strtotime, указан на Формат Даты руководство страница. Эта страница более подробно описывает тот факт, что m/d/Y выводится через d/m/Y (но вы можете, как уже упоминалось в ответах здесь, использовать d-m-Y,d.m.Y или d\tm\tY).


в прошлом я также прибегал к quicky str_replace упоминается в другом ответе, а также самоанализ строки даты в другой формат, например

$subject   = '23/05/2010';
$formatted = vsprintf('%3d/%2d/%1d', sscanf($subject,'%02d/%02d/%04d'));
$timestamp = strtotime($formatted);

с использования функции strtotime рецензия Примечание:

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

Это так просто.

Это хорошее решение многих проблем:

function datetotime ($date, $format = 'YYYY-MM-DD') {

    if ($format == 'YYYY-MM-DD') list($year, $month, $day) = explode('-', $date);
    if ($format == 'YYYY/MM/DD') list($year, $month, $day) = explode('/', $date);
    if ($format == 'YYYY.MM.DD') list($year, $month, $day) = explode('.', $date);

    if ($format == 'DD-MM-YYYY') list($day, $month, $year) = explode('-', $date);
    if ($format == 'DD/MM/YYYY') list($day, $month, $year) = explode('/', $date);
    if ($format == 'DD.MM.YYYY') list($day, $month, $year) = explode('.', $date);

    if ($format == 'MM-DD-YYYY') list($month, $day, $year) = explode('-', $date);
    if ($format == 'MM/DD/YYYY') list($month, $day, $year) = explode('/', $date);
    if ($format == 'MM.DD.YYYY') list($month, $day, $year) = explode('.', $date);

    return mktime(0, 0, 0, $month, $day, $year);

}

самый быстрый, вероятно, должен быть

false!== ($date !== $date=preg_replace(';[0-2]{2}/[0-2]{2}/[0-2]{2};','--',$date))

это вернет false, если формат не похож на правильный, но он не будет проверять, является ли дата действительной

Я не нашел лучшего решения. Вы можете использовать explode(),preg_match_all() и т. д.

у меня есть статическая вспомогательная функция такой

class Date {

    public static function ausStrToTime($str) {
        $dateTokens = explode('/', $str);
        return strtotime($dateTokens[1] . '/' . $dateTokens[0] . '/' . $dateTokens[2]); 

    }

}

вероятно, есть лучшее название для этого, но я использую ausStrToTime() потому что он работает с австралийскими датами (с которыми я часто имею дело, будучи австралийцем). Лучшим именем, вероятно, было бы стандартизированное имя, но я не уверен, что это такое.

Я пытался конвертировать формат ddmmyy в date("Y-m-d" формат, но не работал, когда я непосредственно передаю ddmmyy =date('dmy')

затем понял, что это должно быть в формате гггг-ММ-ДД так. используется подстрока для организации

$strParam = '20'.substr($_GET['date'], 4, 2).'-'.substr($_GET['date'], 2, 2).'-'.substr($_GET['date'], 0, 2);  

затем перешел к date("Y-m-d",strtotime($strParam));

он работал!

вы получаете это значение из базы данных? Если это так, рассмотрите возможность форматирования его в базе данных (используйте date_format в mysql, например). Если нет, то взрыв значения может быть лучшим выбором, так как strtotime просто не оценивает значения dd/mm/yyyy.

Если вы знаете, что это в dd / mm/ YYYY, вы можете сделать:

    $regex = '#([/d]{1,2})/([/d]{1,2})/([/d]{2,4})#';
    $match = array();
    if (preg_match($regex, $date, $match)) {
        if (strlen($match[3]) == 2) {
            $match[3] = '20' . $match[3];
        }
        return mktime(0, 0, 0, $match[2], $match[1], $match[3]);
    }
    return strtotime($date);

он будет соответствовать датам в виде d/m/YY или dd/mm / YYYY (или любой комбинации из двух)...

Если вы хотите поддерживать больше, чем просто разделители /, вы можете изменить регулярное выражение:

    $regex = '#([\d]{1,2})[/-]([\d]{1,2})[/-]([\d]{2,4})#';

а затем добавить любые символы, которые вы хотите в [/-] бит (обратите внимание, символ " - " должен быть последним)

этот обходной путь проще и элегантнее, чем explode:

$my_date = str_replace("/", ".", $my_date);
$my_date = strtotime($my_date);
$my_date = date("Y-m-d", $my_date);

вам не нужно знать, в каком формате вы получаете дату, но если она поставляется с косыми чертами, они заменяются полными остановками, и она рассматривается как Европейская strtotime.

$srchDate = date_format(date_create_from_format('d/m/Y', $srchDate), 'Y/m/d');

Это будет работать для вас. Вы конвертируете строку в пользовательский формат даты, где вы можете указать PHP, какой исходный формат строки был ему предоставлен. Теперь, когда это формат даты, вы можете преобразовать его в формат даты PHP по умолчанию, который является тем же самым, который используется MySQL.

Это решение я использую, даже если ноль не существует.

<?php
 $date = '05/05/2017';
 $date = str_replace('/', '-', $date);
 $date = date('Y-m-d', strtotime($date));

 echo $date;
?>

самое простое решение-это:

$date    = '07/28/2010';
$newdate = date('Y-m-d', strtotime($date));
<?php

$date_info = 2018-09-27;

введите формат в date() функция, передайте свою дату в .

echo date('m-Y-d', strtotime($date_info)); 
?>

Comments

    Ничего не найдено.