2010-01-10 86 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