2014-07-17 4 views
-1

Я пробовал следующий код для конвертации даты из mm-dd-yy формате в формат yyyy-mm-dd.В чем проблема преобразования даты из одного формата в другой в следующем функциональном коде?

function format_date_yyyy_mm_dd($date_val){ 
     if(!empty($date_val)) { 
     $newDate = date("m-d-Y", strtotime($date_val)); 

     return $newDate;   
     } else 
     return false;    
    } 

Предположим, передаваемый аргумент ($ date_val) содержит значение 4-26-1991 после выполнения функции я получаю возвращаемое значение как 01-01-1970 вместо требуемого значения 1991-04-26. Как решить эту проблему? Может кто-нибудь, пожалуйста, помогите мне? Кроме того, если вы предоставите мне функцию для изменения вышеуказанных процедур преобразования даты, это будет очень полезно для меня.

Заранее спасибо.

+3

Этот код не делает то, что вы говорите –

ответ

3

Используйте DateTime класс для вещей, как это. Поскольку у вас есть заданный формат (n-j-Y), вы можете передать его в createFromFormat() метод:

function format_date_yyyy_mm_dd($date_val) { 
    $date = \DateTime::createFromFormat('n-j-Y', $date_val); 
    return $date->format('Y-m-d'); 
} 

Для обратной функции, нормальный конструктор будет достаточно, как он будет иметь возможность читать стандартный формат ISO8601 (YYYY- MM-DD):

function format_date_mm_dd_yy($date_val) { 
    $date = new \DateTime($date_val); 
    return $date->format('n-j-Y'); 
} 
+0

Да, это работает для меня. Можете ли вы добавить функцию для преобразования даты наоборот? – user2839497

+0

Вторая функция должна быть обратной первой функции –

+0

Я бы рекомендовал также использовать параметр DateTimeZone. – bansi

3

Эта функция использует DateTime::createFromFormat(), так как MM-DD-YY неоднозначна и может привести к неправильным датам.

function format_date_yyyy_mm_dd($date_val){ 
    $date = DateTime::createFromFormat('n-j-y', $date_val); 
    return $date->format('Y-m-d'); 
} 

Эта функция возвращает даты в формате ГГГГ-ММ-ДД в формате MM-DD-YY. Так как YYYY-MM-DD является recognized date format нам не нужно DateTime::createFromFormat() разобрать нашу дату для нас:

function format_date_mm_dd_yy($date_val){ 
    $date = new DateTime($date_val); 
    return $date->format('n-j-y'); 
} 
+0

Я бы порекомендовал также использовать параметр DateTimeZone. – bansi

Смежные вопросы