Convertir mm/yyyy a mmyy en PHP

Mis disculpas si esto es repetitivo, pero busqué una respuesta sin éxito.

Tengo una cita. Es un objeto, que he convertido en una cadena:

$exp = (string)$date;

Esta variable se muestra como: 10/2013

Pero cuando intento convertir el formato mm/yyyy a mmyy, uso este código:

$ex = date($exp);
$e = date('m Y',$ex);

...no solo recibo el siguiente aviso de error:

Notice: A non well formed numeric value encountered in ...

... pero mi fecha también se cambia a: 1269 (como en diciembre de 1969 [¿eh?])

¿Qué estoy haciendo mal?

-Beto

preguntado el 03 de mayo de 12 a las 15:05

¿Qué tipo de objeto es el original? $date? A DateTime o un int-time() ¿quizás? 1969 es la fecha mínima, un efecto secundario del mal análisis. -

¿Qué tipo de objeto? A DateTime objeto por casualidad? -

5 Respuestas

$date = substr_replace($date,' ',2,3);

No sé por qué necesitas un formato tan extraño.

contestado el 03 de mayo de 12 a las 16:05

así es como lo quiere mi procesador de tarjetas de crédito... por cierto, ¡gracias! - bobbiloo

La date() La función acepta una marca de tiempo de Unix como su segundo parámetro. Si no lo reconoce como un número, podría ser tratado como 0 (que indica la época, 31 de diciembre de 1969). Para crear una marca de tiempo, creo que quisiste decir

$ex = strtotime($exp);

en lugar de

$ex = date($exp);

Pero incluso entonces, '10/2013' no es un formato de fecha aceptado por strtotime().

Podría crear una marca de tiempo a partir de su formato de fecha anterior como este:

$exp = '10/2013';
$date = explode('/', $exp);
$ex = mktime(0, 0, 0, $date[0], 1, $date[1]);
$e = date('m Y',$ex);

contestado el 03 de mayo de 12 a las 16:05

Comenzando con una fecha incompleta como 10/2013 tendrá que hacer un poco de manipulación de cadenas para que entre mmyy. Si en realidad no necesita una salida de marca de tiempo, no es necesario convertirla en ningún tipo de objeto de fecha o marca de tiempo. Simplemente puede hacer manipulación de cadenas.

list($month, $year) = explode("/", $date);
$newdate = $month . substr($year, 2);
// 1013

Editar (de los comentarios): Si el mes no siempre tiene dos dígitos pero su salida requiere un mes de 2 dígitos, use:

$newdate = str_pad($month, 2, "0", STR_PAD_LEFT) . substr($year, 2);

contestado el 03 de mayo de 12 a las 16:05

Sólo en caso de $month no siempre dos dígitos pueden hacer $newdate = str_pad($month, 2, "0", STR_PAD_LEFT) . substr($year, 2); en lugar de - Aaron W.

@AaronW. Gracias, y añadido arriba. - Michael Berkowski

Debería poder convertir el campo $ fecha directamente:

 $e = date('m/Y', strtotime($date));

si no, entonces esto debería funcionar

 $e = date('m/Y', strtotime(((string)$date)));

contestado el 03 de mayo de 12 a las 16:05

strtotime no se convertirá mm/yyyy correctamente en cualquiera de esos casos - Aaron W.

$exp = date("my");

Dónde my significa "mes" "año".

contestado el 03 de mayo de 12 a las 16:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.