2010-01-10 36 views
6

desarrollo una página web, en la que necesito cambiar el formato de fecha del 22/01/2010 al 2010-01-22 uso la siguiente función pero recibo una advertencia como "Obsoleto: La función ereg() está depreceted en c: \ wamp \ www \ testpage.php en la línea 33 ". ¿Hay alguna forma de ocultar ese error o hay alguna otra forma de cambiar el formato de fecha? Porfavor ayudame a resolver este problema . Gracias de antemano.cambiar el formato de fecha en 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

[Para diferentes formatos/opciones para la fecha, haga clic aquí:] (http://php.net/manual/en/function.date.php) –

Respuesta

7

Está utilizando funciones obsoletas. Use el preg_match en su lugar. También la llamada a preg_match debe estar en una prueba 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

Esto debe hacerlo:

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

O, esto puede ser sin las funciones de fecha como Gumbo sugirió:

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

me gustaría recomendar el uso del date aunque si sospecha necesitas cambiar el formato en el futuro. No es necesario usar una expresión regular para una división simple como esa. Explotar será mucho más rápido en este caso.

Las funciones de expresión regular ereg_ están en desuso a partir de PHP 5.3.0 y se eliminarán en PHP 6. Para expresiones regulares, use las funciones preg_.

Acerca de la ocultación del error; nunca debe ocultar avisos cuando se desarrollan ya que lo ayudan a construir un mejor código. Sin ese aviso, hubieras utilizado felizmente ereg y tu aplicación habría roto horriblemente cuando el servidor se actualiza a PHP 6. Pero, puedes controlar la cantidad de errores mostrados con error_reporting(). Desactivar el error_reporting cuando su sitio se publique podría ser una buena idea.

BTW, comienza a aceptar algunas respuestas si las encuentras útiles.

+1

Uso de 'date' y 'mktime' no es necesario. El procesamiento simple de cadenas será suficiente. – Gumbo

+0

@Gumbo, usando la fecha (como sugerí también) ofrece más flexibilidad para cambiar el formato de fecha en un tiempo futuro sin tener que reordenar o reprocesar la cadena. – johnnyArt

3

Use las funciones PCREpreg_matchpreg_replace o lugar:

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

Pero también se puede utilizar una combinación de explode, array_reverse y implode:

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

+1: Eso está bien :) – gameover

+0

¿Cuál es el motivo del voto a favor? – Gumbo

3

Con las últimas versiones de PHP, POSIX regex functions son de hecho obsoletos - en que debe dejar de usarlos, y utilizar las funciones preg_* lugar.


Aquí es su código, reescrito para usar 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); 

y obtendrá:

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


Para ser más precisos, citando la documentación de ereg:

Esta función ha sido DEPRECATED a partir de PHP 5.3.0 y QUITADO a partir de PHP 6.0.0. Confiando en esta característica es altamente desaconsejado.

Por lo tanto, no dude en leer la documentación de Regular Expressions (Perl-Compatible) - que son más potentes, más rápidos, ... que los POSIX.

11

¿Por qué no utilizar strtotime, date y str_replace funciones nativas de php para hacer el truco en una línea simple?

De esta manera usted podría cambiar fácilmente el formato de la fecha a cualquier cosa que desee fácilmente usando las muchas opciones date ofertas.

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

Salidas 2010-01-22

documentación para funciones utilizado:

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

Proporcione más información. – Phiter

Cuestiones relacionadas