изменить формат даты в php - PullRequest
6 голосов
/ 10 января 2010

я разрабатываю веб-страницу, в которой мне нужно изменить формат даты с 22.01.2010 на 2010-01-22 я использую следующую функцию, но получаю предупреждение как «Устаревшее: функция ereg () устарела в c: \ wamp \ www \ testpage.php в строке 33» Есть ли способ скрыть эту ошибку или есть другой способ изменить формат даты? Пожалуйста, помогите мне решить эту проблему. Заранее спасибо .

$datedue = $_REQUEST['txtJoiningdate'];
        $r = ereg ("([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})", $datedue, $redgs);
        $billdate=$redgs[3]."-".$redgs[2]."-".$redgs[1];

Ответы [ 8 ]

11 голосов
/ 10 января 2010

Почему бы не использовать функции strtotime, date и str_replace, встроенные в php, чтобы выполнить трюк в одной простой строке?

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

echo date('Y-m-d',strtotime(str_replace("/",".","22/01/2010")));

Выходы 2010-01-22

Документация по используемым функциям:

7 голосов
/ 10 января 2010

Вы используете устаревшие функции. Вместо этого используйте preg_match. Также вызов preg_match должен быть в тесте if.

<?php
$datedue = '22/01/2010';
if(preg_match('@([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})@', $datedue, $redgs)) {
    $billdate=$redgs[3]."-".$redgs[2]."-".$redgs[1];    
    echo $billdate; // prints  2010-01-22 
}
?>
3 голосов
/ 10 января 2010

В последних версиях PHP функции регулярного выражения POSIX действительно устарели - вам следует прекратить их использование и использовать вместо них функции preg_*.


Вот ваш код, переписанный для использования preg_match:

preg_match("#([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})#", '22/01/2010', $redgs);
$billdate=$redgs[3]."-".$redgs[2]."-".$redgs[1];
var_dump($billdate);

И вы получите:

$ /usr/local/php-5.3/bin/php temp.php
string(10) "2010-01-22"


Чтобы быть более точным, цитируя документацию ereg:

Эта функция УСТАРЕЛА Начиная с PHP 5.3.0 и УДАЛЕНО на PHP 6.0.0. Полагаться на эту функцию очень обескуражен.

Итак, не стесняйтесь читать документацию Регулярные выражения (совместимые с Perl) - которые более мощные, быстрые, ... чем POSIX.

3 голосов
/ 10 января 2010

Используйте функции PCRE preg_match или preg_replace вместо:

$billdate = preg_replace('~([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})~', '$3-$2-$1', $datedue);

Но вы также можете использовать комбинацию explode, array_reverse и implode:

$billdate = implode('-', array_reverse(explode('/', $datedue)));
3 голосов
/ 10 января 2010

Это должно сделать это:

list($d, $m, $y) = explode('/', $datedue);
$billdate = date('Y-m-d', mktime(0,0,0,$m,$d,$y);

Или это может быть без функций даты, как предложил Гамбо:

list($d, $m, $y) = explode('/', $datedue);
$billdate = "$y-$m-$d"; 

Я бы рекомендовал использовать date, хотя, если вы подозреваете, что вам нужно изменить формат в будущем. Для такого простого разбиения нет необходимости использовать регулярное выражение. В этом случае взрыв будет намного быстрее.

Функции регулярных выражений ereg_ устарели с PHP 5.3.0 и будут удалены в PHP 6. Для регулярных выражений используйте функции preg_.

О сокрытии ошибки; вы никогда не должны скрывать уведомления при разработке, так как они помогают вам создавать лучший код. Без этого уведомления вы бы с радостью использовали ereg, и ваше приложение ужасно сломалось бы при обновлении сервера до PHP 6. Но вы можете контролировать количество отображаемых ошибок с помощью error_reporting () . Отключение функции error_reporting при запуске сайта может быть хорошей идеей.

Кстати, начните принимать некоторые ответы, если вы найдете их полезными.

1 голос
/ 06 ноября 2012
$date = '01/24/2006'; 
echo date('Y-m-d', strtotime($date)); // outputs 2006-01-24  
1 голос
/ 10 января 2010
<?php
list($day, $month, $year) = split('/', $_REQUEST['txtJoiningdate']); // 22/01/2010
$new_date = "$year-$month-$day"; // $new_date now equals 2010-01-22
?>
0 голосов
/ 17 февраля 2016
if ( ! function_exists('changeDateFormat'))
{
    function changeDateFormat($original)
    {
        //$original = '2015-08-10';
        //  2015-08-10 to 10-08-2015
        $exploded = explode("-", $original);
        $exploded = array_reverse($exploded);
        $newFormat = implode("-", $exploded);
        return $newFormat;
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...