miércoles, 10 de agosto de 2011

PHP: Cálculo de semana laboral actual

Dejo a disposición un código que permite obtener la semana laboral actual (lunes a viernes tomando domingo como inicio de semana).

Salida del código:

From: 08-08-2011 To: 08-12-2011


<?php


class DateUtils {

public static function get_current_date() {
return substr(DateUtils::get_current_date_time(), 0, 10);
}

public static function get_current_date_time() {
return date('Y-m-d H:i:s');
}

public static function get_day_of_current_week_as_number() {
return date("w",mktime());
}

public static function get_day_of_week_as_number($date_as_string) {
return date("w", strtotime($date_as_string));
}

public static function substract_days_to_current_date($days) {
$operation = "-";

if ($days < 0) {
$operation = "+";
$days = abs($days);
}
$newdate = strtotime ( $operation. $days .' day' ,strtotime ( date('Y-m-d') )) ;
return date ( 'm-d-Y' , $newdate );
}

public static function substract_days_to_date($date_as_string, $days) {

$operation = "-";

if ($days < 0) {
$operation = "+";
$days = abs($days);
}
$newdate = strtotime ( $operation . $days .' day' , strtotime ( $date_as_string) ) ;
$newdate = date ( 'm-d-Y' , $newdate );
return $newdate;
}

public static function get_start_day_of_current_work_week() {
$monday_delta = 0;
$current_day_of_week = DateUtils::get_day_of_current_week_as_number();

if($current_day_of_week > 1) {
$monday_delta = $current_day_of_week-1;
} else if($current_day_of_week == 0){
$monday_delta = -1;
}
return DateUtils::substract_days_to_current_date($monday_delta);
}

public static function get_start_day_of_work_week($date_as_string) {
$monday_delta = 0;
$day_of_week = DateUtils::get_day_of_week_as_number($date_as_string);

if($day_of_week > 1) {
$monday_delta = $day_of_week-1;
} else if($day_of_week == 0){
$monday_delta = -1;
}
return DateUtils::substract_days_to_date($date_as_string, $monday_delta);
}

public static function get_delta_for_end_day_of_work_week($current_day_of_week) {
$friday_delta = 0;

switch ($current_day_of_week) {
case 0: // Sunday.
$friday_delta=-5;
break;
case 1: // Monday.
$friday_delta=-4;
break;
case 2: // Tuesday.
$friday_delta=-3;
break;
case 3: // Wednesday.
$friday_delta=-2;
break;
case 4: // Thursday.
$friday_delta=-1;
break;
case 5: // Friday.
$friday_delta=0;
break;
case 6: // Saturday.
$friday_delta=1;
break;
}
return $friday_delta;
}

public static function get_end_day_of_current_work_week() {
$friday_delta = 0;
$current_day_of_week = DateUtils::get_day_of_current_week_as_number();

return DateUtils::
substract_days_to_current_date(DateUtils::
get_delta_for_end_day_of_work_week($current_day_of_week ));
}

public static function get_end_day_of_work_week($date_as_string) {
$friday_delta = 0;
$current_day_of_week = DateUtils::get_day_of_week_as_number($date_as_string);

return DateUtils::
substract_days_to_date($date_as_string, DateUtils::
get_delta_for_end_day_of_work_week($current_day_of_week ));
}

public static function get_current_work_week_range() {
return "From: " . DateUtils::get_start_day_of_current_work_week() . " To: "
. DateUtils::get_end_day_of_current_work_week();
}

}
echo "<h1>" . DateUtils::get_current_work_week_range() . "</h1>";
?>


martes, 9 de agosto de 2011

Eclipse: Configurar dos carpetas fuentes con un mismo destino de deploy


Hace poco tuve que correr para acomodar un proyecto que el cliente pedía con cierta estructura de carpetas. Aparentemente el cliente tiene como norma separar en dos carpetas el código de la aplicación. En una pone todo el código que corre del lado del cliente: “htdocs”, y en otra carpeta todo el código que corre del lado del servidor (JSP’s, Structs actions, etc): “Java”.

Lo interesante es que los JSP’s igual tenían que llamar códigos de CSS y JavaScript que están situados en la carpeta de htdocs la cual está fuera del directorio raíz de la aplicación Java. Me puso a pensar un buen rato hasta que caí en razón que al final el cliente hace un deploy de las dos carpetas en una misma. Así que descubrí como hacer esto con Eclipse. Igualmente se puede hacer con cualquier herramienta de construcción como ANT o Maven, pero para los fines propios la opción que muestro a continuación fue suficiente.

Se hace clic derecho sobre el proyecto web, se va a propiedades y en la opción de “Deployment Assembly”, simplemente se agregan las dos carpetas fuentes con un mismo path de deploy. Así de sencillo.



viernes, 8 de julio de 2011

JavaScript: Creando un formulario de manera dinámica

Este es un código simple de JavaScript incrustado en el HTML, que crea un formulario (form) dinámicamente, para luego ser enviado de manera inmediata por POST enviando una variable (<input type="hidden">).


<html>
<body>
<script type="text/javascript">
var form=document.createElement("form");
form.setAttribute("action","target.php");
form.setAttribute("method","get");
var input=document.createElement("input");
input.setAttribute("value","x12kfh378");
input.setAttribute("type","hidden");
form.appendChild(input);
document.body.appendChild(form);
form.submit();
</script>
</body>
</html>

lunes, 4 de julio de 2011

Struts 2: Configurar tamaño máximo para subida de archivos

Para configurar el tamaño máximo de subida de archivs ("uploading") en Struts 2, simplemente se agrega la siguiente constante en el struts.xml remplazando por el valor deseado:

<struts>
<constant name="struts.multipart.maxSize" value="50000000" />
....
</struts>

Esto evita la excepción cuando se sobrepasa el límite por defecto.

"the request was rejected because its size exceeds the configured maximum"