Cómo utilizar PHP date() para convertir de AAAA-MM-AA a “01 de enero de 2011” en una función

StackOverflow https://stackoverflow.com//questions/9618964

Pregunta

Puedo convertir la fecha (05/01/2011 al 5 de enero de 2011) usando:

<?php   
$whatever = get_post_meta($post->ID, start_date, true);
$nice_date = date("d F Y", strtotime($whatever));
echo $nice_date;
?>

Sin embargo, me gustaría implementar eso en una función para poder usarla en diferentes lugares:

<?php   

function newDate($whatever) {
$nice_date = date("d F Y", strtotime($whatever));
return $nice_date; }

$crap_date = get_post_meta($post->ID, start_date, true);
echo newDate($crap_date);

?>

La función está dentro de un bucle while (WordPress). La primera cita se está formateando correctamente., pero en el segundo aparece el siguiente mensaje de error:

Error fatal:No se puede volver a declarar newDate() (previamente declarado en...

¿Cómo haría que esto funcione y por qué sucede eso? Gracias.

¿Fue útil?

Solución

Ha puesto la definición de la función dentro de un bucle.Por ejemplo:

while ($someCondition) {

  function newDate () {

    // Function code

  }

  // Loop code

}

Esto intenta redeclarar la función en cada iteración del ciclo, lo que resultará en el error que verá.

Envuelva la definición de la función en un if:

while ($someCondition) {

  if (!function_exists('newDate')) {
    function newDate () { 

      // Function code

    }
  }

  // Loop code

}

O (mejor) declarar la función antes del ciclo:

function newDate () { 

  // Function code

}

while ($someCondition) {

  // Loop code

}

EDITAR Siguiendo su comentario a continuación, así es como se podría reescribir ese código para usar el DateTime objeto:

function format_date ($dateStr, $formatStr = 'd F Y') {
  $date = new DateTime($dateStr);
  return $date->format($formatStr);
}

$crap_date = get_post_meta($post->ID, 'start_date', true);
echo format_date($crap_date);

Esta función acepta una cadena en cualquier formato de fecha que pueda ser analizada por el DateTime objeto como primer argumento (creo que usa el mismo mecanismo interno que strtotime()).El segundo argumento opcional es una cadena de formato idéntica al primer argumento del date() función - si esto se omite, el valor predeterminado d F Y se utilizará.

Con respecto a sus preguntas sobre programación orientada a objetos:

Is this approach better? - Eso es en gran medida una cuestión de opinión.Veo comentado aquí que el DateTime El objeto es mejor que el strtotime()/date() enfoque y viceversa, pero en realidad todo esto se reduce a que debe utilizar el enfoque que mejor comprenda, el que tenga más sentido para una situación determinada y el que haga que su código sea más legible para usted y otros desarrolladores. puede estar trabajando con.Nunca he visto un argumento convincente para que uno sea definitivamente mejor que el otro.Para la rutina anterior, no creo que haga mucha diferencia.

How could I rewrite my function in that format? - Véase más arriba.

Is DateTime the object and format the method to change a property? - DateTime es el nombre de un clase.En el código de ejemplo anterior, el $date variable es una objeto, que es un instancia del DateTime clase.Y si, format es el nombre de un método.

Would this help me understand OO better if I will try and write all the code in this approach, where possible? - La programación orientada a objetos requiere una forma de pensar diferente a la de escribir código de procedimiento, y no es algo trivial de aprender.Hay muchísimos recursos disponibles para ayudarte a familiarizarte con la programación orientada a objetos, así que no entraré en detalles aquí. Google sería el lugar para empezar.Lo único que diré es que si quieres entender la programación orientada a objetos, PHP no es el lugar para comenzar.PHP es no un lenguaje OO, es un lenguaje de scripting que proporciona soporte OO.Le recomendaría Java para aprender a pensar en OO, aunque otros pueden no estar de acuerdo y no estarán de acuerdo.

Otros consejos

Debe declarar la función antes del bucle. Declara una función llamada NewDate primero y luego lo usa en cualquier lugar en cualquier momento, Pero no puede declarar una función con el mismo nombre nuevamente (y eso es exáceador lo que sucede cuando escribe function newDate(..){....} dentro de un bucle.

function newDate($whatever) {
$nice_date = date("d F Y", strtotime($whatever));
return $nice_date; }

$crap_date = get_post_meta($post->ID, start_date, true);
echo newDate($crap_date);

//Here goes the loop
while( $i < 100)
{
  //do something with the newDate function
}

¿Es la función declarada dentro del bucle while?Si es así, se declarará una vez por cada iteración del bucle, y dado que una función solo se puede declarar una vez, esto conducirá al error que usted describe.

Si este es el caso, puede simplemente declarar la función fuera del bucle (tal vez en un archivo diferente con otras funciones de ayuda) y llámelo desde el interior del bucle sin problemas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top