在PHP中更改日期格式

时间:2010-01-10 14:43:42

标签: php

我开发了一个网页,因为我需要将日期格式从2010年1月22日更改为2010-01-22 我使用以下函数,但我得到一个警告,“不推荐:函数ereg()在第33行的c:\ wamp \ www \ testpage.php中被删除”。反正有没有隐藏该错误或有没有其他方法来更改日期格式?请帮我解决这个问题。 提前致谢 。

$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 个答案:

答案 0 :(得分:11)

为什么不使用php原生的strtotimedatestr_replace函数来完成一个简单的操作?

通过这种方式,您可以使用date提供的众多选项轻松地将日期格式更改为您想要的任何内容。

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

输出2010-01-22

所用功能的文档:

答案 1 :(得分:7)

您正在使用已弃用的功能。请改用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 
}
?>

答案 2 :(得分:3)

这应该这样做:

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

或者,这可能没有Gumbo建议的日期功能:

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

如果您怀疑以后需要更改格式,我建议您使用date。没有必要使用正则表达式进行简单的拆分。在这种情况下,爆炸会快得多。

自PHP 5.3.0起,ereg_正则表达式函数已弃用,将在PHP 6中删除。对于正则表达式,请使用preg_函数。

关于隐藏错误;开发时不应隐藏通知,因为它们可以帮助您构建更好的代码。如果没有那个通知,你就会愉快地使用ereg,当服务器更新到PHP 6时,你的应用程序会崩溃。但是,你可以用error_reporting()来控制显示错误的数量。当您的网站上线时关闭error_reporting可能是一个好主意。

顺便说一句,如果你觉得它们有用,就开始接受一些答案。

答案 3 :(得分:3)

使用PCRE函数preg_matchpreg_replace代替:

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

但您也可以使用explodearray_reverseimplode的组合:

$billdate = implode('-', array_reverse(explode('/', $datedue)));

答案 4 :(得分:3)

使用最新版本的PHP,POSIX regex functions确实已被弃用 - 您应该停止使用它们,而是使用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的文档:

  

此功能已 DEPRECATED   自PHP 5.3.0起, REMOVED 起作用   PHP 6.0.0。依靠这个功能是   非常沮丧。

所以,请不要犹豫,阅读Regular Expressions (Perl-Compatible)的文档 - 它们比POSIX更强大,更快,...更多。

答案 5 :(得分:1)

<?php
list($day, $month, $year) = split('/', $_REQUEST['txtJoiningdate']); // 22/01/2010
$new_date = "$year-$month-$day"; // $new_date now equals 2010-01-22
?>

答案 6 :(得分:1)

$date = '01/24/2006'; 
echo date('Y-m-d', strtotime($date)); // outputs 2006-01-24  

答案 7 :(得分:0)

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;
    }
}