我开发了一个网页,因为我需要将日期格式从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];
答案 0 :(得分:11)
为什么不使用php原生的strtotime
,date
和str_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_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)));
答案 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;
}
}