2010-07-19 16 views
37

¿Hay una manera fácil de cambiar $month = "July"; de modo que $nmonth = 7 (07 estaría bien también). Podría hacer una declaración de caso, pero seguramente ya hay una función para convertir? EDITAR: Ojalá pudiera aceptar múltiples respuestas, porque dos de ustedes básicamente me dieron lo que necesitaba por sus poderes combinados.convertir mes del nombre al número

$nmonth = date('m',strtotime($month)); 

que le dará el valor numérico de $month. Gracias!

Respuesta

49

Sí,

$date = 'July 25 2010'; 
echo date('d/m/Y', strtotime($date)); 

El m formatea el mes a su representación numérica allí.

+0

Gracias hombre ... ahorraste unas horas de la mía .. :) – MFarooqi

+0

Uf, gracias, tan fácil una vez que lo sepas. – Maurice

59

Prueba esto:

<?php 
    $date = date_parse('July'); 
    var_dump($date['month']); 
?> 
+1

Esto funciona con las formas cortas "Jan", "Jul", "Oct", etc. también. –

+0

¡Sí! funciona .. – VKGS

+0

perfecto, gracias, esta es la mejor solución, imo. – DrCord

1

Puede ser más fácil de crear una fecha falsa para que pueda utilizar la función de fecha.

excelente referencia aquí: http://php.net/manual/en/function.date.php

Ejemplo:

<? 
$month = 7; 

$tempDate = mktime(0, 0, 0, $month, 1, 1900); 

echo date("m",$tempDate); 


?> 
+0

¿podría formatear como código? – NikiC

+0

¿Se ve bien? –

3
$nmonth = date("m", strtotime($month)); 
+0

¿podría formatear como código? – NikiC

+0

no sé por qué esta respuesta ha sido actualizada. es tan simple y claro. – VKGS

+0

Probé esta solución y en algunos casos devuelve el número incorrecto, p. '5' para 'abril'. Alguien tiene una idea de por qué? Lo echaré un vistazo más de cerca más tarde. – pat

16

Un aspecto interesante aquí, el código dado por Kelly funciona bien,

$nmonth = date("m", strtotime($month)); 

pero para el mes de febrero, no funcionará como se espera cuando el día actual sea 30 o 31 en año bisiesto y 29 , 30,31 en año no bisiesto. Devolverá como número de mes. Ej:

$nmonth = date("m", strtotime("february")); 

La solución es, añadir el año con el mes siguiente manera:

$nmonth = date("m", strtotime("february-2012")); 

Tengo este de esta comment en el manual de php.

2
$monthname = date("F", strtotime($month)); 

F significa nombre completo del mes

4

también se puede utilizar éste:

$month = $monthname = date("M", strtotime($month)); 
2
<?php 
$monthNum = 5; 
$monthName = date("F", mktime(0, 0, 0, $monthNum, 10)); 
echo $monthName; //output: May 
?> 
1

Uso

date("F", mktime(0, 0, 0, ($month))); 

where, $month value will be 1 -> 12 
0

Con PHP 5.4, puede activar la respuesta de Mateo en una sola línea:

$date = sprintf('%d-%d-01', $year, date_parse('may')['month']); 
8
$string = "July"; 
echo $month_number = date("n",strtotime($string)); 

devuelve '7' [número de meses]

Uso date("m",strtotime($string)); para la salida "08"

Para más formatos Reffer este ..
http://php.net/manual/en/function.date.php

0
$date = 'Dec 25 2099'; 
echo date('d/m/Y', strtotime($date)); 

Esto devuelve 01/01/1970, que significa PHP no soporta todas las fechas, devuelve la fecha formato correcto hasta Jan 19 2038Jan 20 2038 pero vuelve 01/01/1970

1

Por encima de respuesta es buena. Aquí hay otra manera de hacerlo: -

function getMonthNumber($monthStr) { 
//e.g, $month='Jan' or 'January' or 'JAN' or 'JANUARY' or 'january' or 'jan' 
$m = ucfirst(strtolower(trim($monthStr))); 
switch ($m) { 
    case "January":   
    case "Jan": 
     $m = "01"; 
     break; 
    case "Febuary": 
    case "Feb": 
     $m = "02"; 
     break; 
    case "March": 
    case "Mar": 
     $m = "03"; 
     break; 
    case "April": 
    case "Apr": 
     $m = "04"; 
     break; 
    case "May": 
     $m = "05"; 
     break; 
    case "June": 
    case "Jun": 
     $m = "06"; 
     break; 
    case "July":   
    case "Jul": 
     $m = "07"; 
     break; 
    case "August": 
    case "Aug": 
     $m = "08"; 
     break; 
    case "September": 
    case "Sep": 
     $m = "09"; 
     break; 
    case "October": 
    case "Oct": 
     $m = "10"; 
     break; 
    case "November": 
    case "Nov": 
     $m = "11"; 
     break; 
    case "December": 
    case "Dec": 
     $m = "12"; 
     break; 
    default: 
     $m = false; 
     break; 
} 
return $m; 
} 
+0

Febrero, no "Febrero" –

-2

Sé que esto puede parecer una solución simple, pero ¿por qué no usar algo como esto

<select name="month"> 
    <option value="01">January</option> 
    <option value="02">February</option> 
    <option selected value="03">March</option> 
</select> 

El usuario ve febrero, pero 02 se contabiliza en la base de datos de

0
$dt = '2017-Jan-10'; 
     OR 
$dt = '2017-January-10'; 

fecha de eco ('Ym-d', strtotime ($ dt));

echo date ('Y/m/d', strtotime ($ dt));

Cuestiones relacionadas