Fechas PHP
Hola, yo de fechas php nada, no me entero.
En un formulario selecciono año y mes (el día no)
y necesito dos fechas, uno sería por ejemplo 2007-09-30 (último dia mes elegido) y el otro seria último dia 3 meses antes 2007-06-30.
Como puedo cambiar esto para conseguirlo?:
<code>
$year = isset($_POST['year'])? intval($_POST['year']) : date("Y");
$month = isset($_POST['month'])? intval($_POST['month']) : date("m");
$date = $_REQUEST['date'];
$current_month_first = mktime(0,0,0, $month, 1, $year);
$current_month_last = strtotime("-1 day", strtotime("+1 month", $current_month_first));
$date_first = date("Y-m-d", $current_month_first);
$date_last = date("Y-m-d", $current_month_last);</code>
Hasta ahora tengo esto que me da una fecha bien, pero la otra no, y no sé como hacerlo:
<code>$year = isset($_POST['year'])? intval($_POST['year']) : date("Y");
$month = isset($_POST['month'])? intval($_POST['month']) : date("m");
$current_month_first = mktime(0,0,0, $month, $day, $year);
$current_month_last = strtotime("-1 day", strtotime("-2 month", $current_month_first));
$date_first = date("Y-m-d", $current_month_first);
$date_last = date("Y-m-d", $current_month_last);
echo '<p>$date_first: '.$date_first.'</p>';
echo '<p>$date_last: '.$date_last.'</p>';</code>
Me da esto:
$date_first: 2007-08-31
$date_last: 2007-06-30
como veis $date_first esta mal.
Gracias
Usuario desconocido
<code>
$meses = array(31,28,31,30,31,30,31,31,30,31,30,31);
$mes_fin = 8;
$ano_fin = 2007;
$mes_ini = $mes_fin - 3;
if ($mes_ini < 0)
{
$ano_ini = $ano_fin - 1;
$mes_ini= $mes_ini + 12;
}
else
{
$ano_ini = $ano_fin;
}
echo "<br>Fecha Final: ".$ano_ini."-".$mes_ini."-".$meses[$mes_ini-1];
</code>
helenp
angelphp
<code>
$meses = array(31,28,31,30,31,30,31,31,30,31,30,31);
$mes_fin = 8;
$ano_fin = 2007;
$mes_ini = $mes_fin - 3;
if ($mes_ini < 0)
{
$ano_ini = $ano_fin - 1;
$mes_ini= $mes_ini + 12;
}
else
{
$ano_ini = $ano_fin;
}
echo "<br>Fecha Final: ".$ano_ini."-".$mes_ini."-".$meses[$mes_ini-1];
</code>
Gracias,
pero veo que no me he explicado bien,
tiene que ser algo como el script que tengo, que use las funciones de fechas de php ya que el ususario elige distintos meses y años y las fechas que di era solo un ejemplo.
Y ademas esta el problema de febrero.
Usuario desconocido
Yo creia que lo que querias era una ayuda no que te hiciera el trabajo.;->>
El codigo que te puse funciona perfectamente sin usar las funciones de fecha de php que dejan mucho que desear.
Te pego una version con año bisiesto, que recoje los mismos parametros que pasas arriba. si no entendi mal lo que quieres es dados un mes y año restarles 3 meses. Es asi ?. Hoy es lunes y estoy estoy todavia frio.;->>
<code>
$meses = array(31,28,31,30,31,30,31,31,30,31,30,31);
$ano_fin = isset($_POST['year'])? intval($_POST['year']) : date("Y");
$mes_fin = isset($_POST['month'])? intval($_POST['month']) : date("m");
//$mes_fin = 5;
//$ano_fin = 2008;
$mes_ini = $mes_fin - 3;
if ($mes_ini < 0)
{
$ano_ini = $ano_fin - 1;
$mes_ini= $mes_ini + 12;
}
else
{
$ano_ini = $ano_fin;
}
$dia = $meses[$mes_ini-1];
if ($mes_ini == 2)
{
if (es_bisiesto($ano_ini))
{
$dia = "29";
}
}
echo "<br>Fecha Final: ".$ano_ini."-".$mes_ini."-".$dia;
function es_bisiesto($ano)
{
if ( ($ano % 4 == 0) and ($ano % 100 != 0) || ($ano % 400 == 0) )
{
return true;
}
else
{
return false;
}
}
</code>
helenp
angelphp
Yo creia que lo que querias era una ayuda no que te hiciera el trabajo.;->>
El codigo que te puse funciona perfectamente sin usar las funciones de fecha de php que dejan mucho que desear.
Te pego una version con año bisiesto, que recoje los mismos parametros que pasas arriba. si no entendi mal lo que quieres es dados un mes y año restarles 3 meses. Es asi ?. Hoy es lunes y estoy estoy todavia frio.;->>
Gracias, no querria que me hiciera el trabajo, solo ayudar a cambiar lo que ya tenia, porque funciona muy bien, pero no consigo cambiarlo a mi gusto.
No sé a que te refieres con que las funciones de fecha no van bien????
Porque lo de febrero, con las funciones de fecha no haria falta ver si el año es bisiestro.
Voy a probar tu codigo, sin embargo veo que tiene un año fin.... eso tampoco va porque el codigo va a estar muchos años, y se elige el año tambien.
Y lo que quiero son 2 fechas, 1 al final de un mes cualquier de cualquier año, solo elegiendo año y mes mediante un formaulario y la otra al final del del mes 3 meses atras.
Usuario desconocido
El ano_fin no es mas que el nombre de la variable, como ves toma el mes y el año que tu formulario devuleve. Da igual el que sea, sea 2008, 2025 o 1980.
<code>
$ano_fin = isset($_POST['year'])? intval($_POST['year']) : date("Y");
$mes_fin = isset($_POST['month'])? intval($_POST['month']) : date("m");
</code>
En versiones antiguas de php 4.X las funciones de fecha estaban plagadas de bugs, uno de ellos era el calculo de bisiestos, supongo que ahora iran bien.
helenp
[quote:6cbdd376de="angelphp"]El ano_fin no es mas que el nombre de la variable, como ves toma el mes y el año que tu formulario devuleve. Da igual el que sea, sea 2008, 2025 o 1980.
<code></code>