2010-01-10 90 views
6

我开发一个网页,在我需要的日期格式更改从22/01/2010至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]; 
+0

[对于日期不同格式/选项,请点击:(http://php.net/manual/en/function.date.php) – 2011-07-12 08:00:02

回答

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 
} 
?> 
3

这应做到:

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

使用'date'和'mktime'不是必需的。简单的字符串处理就足够了。 – Gumbo 2010-01-10 14:58:50

+0

@Gumbo,使用日期(就像我建议的那样)为未来更改日期格式提供了更大的灵活性,而无需重新排序或重新处理字符串。 – johnnyArt 2010-01-10 15:02:03

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))); 
+0

+1:这很整齐:) – gameover 2010-01-10 14:58:24

+0

downvote的原因是什么? – Gumbo 2010-01-10 17:51:28

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和删除截至 PHP 6.0.0。依靠这个功能是 高度不鼓励。

因此,请不要犹豫,阅读Regular Expressions (Perl-Compatible)的文档 - 这比POSIX文档更强大,更快速......。

11

为什么不使用strtotimedatestr_replace函数原生的PHP在一个简单的线路做伎俩?

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

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

2010-01-22输出

文档为函数使用:

1
<?php 
list($day, $month, $year) = split('/', $_REQUEST['txtJoiningdate']); // 22/01/2010 
$new_date = "$year-$month-$day"; // $new_date now equals 2010-01-22 
?> 
1
$date = '01/24/2006'; 
echo date('Y-m-d', strtotime($date)); // outputs 2006-01-24 
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; 
    } 
} 

+0

请提供更多信息。 – Phiter 2016-02-17 11:43:45