fecha

Hacer ciclos con fechas en PHP

Ciclo while con fechas en PHP

Hoy en la mañana estuve platicando con un compañero sobre un algoritmo para hacer un ciclo while con PHP que fuera desde una fecha hasta otra, día a día. Por ejemplo, un ciclo que fuera desde el 18 de marzo hasta el 25 de marzo y en cada iteración se pudiera obtener el día.

Hacer ciclos con fechas en PHP

Hacer ciclos con fechas en PHP

Gracias a las funciones de strtotime y date fue una tarea fácil, y hoy vengo a explicar cómo es por si a alguien más le sirve.

Continue reading…

Java - obtener fecha y hora actual como cadena usando formato

Obtener y formatear fecha y hora actual en Java

Fecha y hora actual con Java y LocalDateTime

En este post voy a mostrar cómo obtener y formatear la fecha (junto con la hora) actual en Java usando LocalDateTime y DateTimeFormatter.

Java - obtener fecha y hora actual como cadena usando formato

Java – obtener fecha y hora actual como cadena usando formato

Al final obtendremos una fecha y hora como 2019-02-08 19:06:52, aunque podremos cambiar este formato.

Continue reading…

Formatear y obtener fecha y hora actual en Python 3

Obtener y formatear fecha y hora actual en Python

En este post veremos dos cosas para trabajar con la fecha y hora en Python:

  1. Cómo obtener la fecha y hora actual, separada por año, mes, día, hora, minuto, segundo y microsegundos
  2. Formatear la fecha y hora en Python para que sea legible y amigable.
Formatear y obtener fecha y hora actual en Python 3

Formatear y obtener fecha y hora actual en Python 3

Veremos algunos formatos útiles, como “Miércoles, 19 de diciembre del 2018” o “2018/12/19“, también con la hora, por ejemplo “Miércoles, 19 de diciembre del 2018. 7:30 AM” o incluso únicamente la hora, por ejemplo, “11:30 PM” o “23:10:15

Continue reading…

Sumar fechas en MySQL

Sumar y restar fechas con MySQL usando date_add y date_sub

Ya vimos cómo calcular la diferencia de fechas en años, meses, o cualquier tipo de medida en MySQL. Ahora veamos cómo operar con fechas; es decir, sumar y restar tiempo a fechas con MySQL.

Para operar fechas vamos a usar las funciones date_add y date_sub. Podremos sumar y restar estos intervalos de tiempo:

  • Años
  • Meses
  • Días
  • Horas
  • Semanas
  • Minutos

Y muchos más, así como combinaciones de los mismos. Al final dejo un enlace en donde listo y ejemplifico a todos ellos.

Continue reading…

Obtener fecha de mañana en PHP

Introducción

Ya vimos cómo obtener los días transcurridos en dos fechas con PHP en un post anterior. Ahora veamos cómo obtener la fecha de mañana, incluso con precisión de segundos.

Por ejemplo, la fecha de hoy que escribo el post es 3 de octubre del 2018 a las 16 con 16 minutos y 18 segundos. La fecha de mañana con precisión de segundos sería 4 de octubre del 2018 a las 16 con 16 minutos y 18 segundos.

Claro que podríamos omitir los minutos y tener únicamente el 4 de octubre del 2018. Pues bien, eso es lo que haremos.

Continue reading…

Obtener fecha actual en Go

Obtener fecha actual en Go

Introducción

En nuestras apps siempre necesitaremos obtener la fecha actual. Por ejemplo, si tenemos un sistema de ventas necesitamos guardar la fecha y hora en la que determinada venta fue realizada.

Hoy veremos cómo formatear y obtener la fecha actual en Golang. Lo que obtendremos será algo como lo de abajo:

2018-05-16T12:52:54

Vamos allá

Obtener y formatear fecha y hora actual

Para obtener la fecha necesitamos el paquete time, incluido por defecto. Y para formatearla, utilizaremos fmt.

Lo que haremos con fmt será formatear la fecha llamando a Sprintf que formatea una cadena pero no la imprime (al contrario de Printf), sino que la devuelve.

Código de ejemplo

package main

import "fmt"
import "time"

func main() {
	t := time.Now()
	fecha := fmt.Sprintf("%d-%02d-%02dT%02d:%02d:%02d",
		t.Year(), t.Month(), t.Day(),
		t.Hour(), t.Minute(), t.Second())

	fmt.Println("La fecha actual es =>", fecha)
}

Al ejecutarlo se muestra esta salida, dependiendo de la hora y fecha en la que ejecutemos el programa:

Obtener fecha con microsegundos en PHP

Introducción

En este post veremos cómo obtener o formatear la fecha del sistema con microsegundos, utilizando PHP.

A lo que me refiero es que obtendremos la fecha actual, que traerá también la representación de microsegundos.

Los resultados del formato se verían más o menos así:

2018-05-08 22:55:14.010688

En donde es el año, mes, día. Seguido de la hora, minutos y segundos. Y después de los segundos, los microsegundos.

Un microsegundo es la millonésima parte de un segundo.

Formatear y obtener fecha incluyendo microsegundos

Es muy fácil obtenerla. Recomiendo primero establecer bien la zona horaria. De ahí, el código (tomado de aquí) se ve así:

<?php
$ahora = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));
$formateado = $ahora->format("Y-m-d H:i:s.u");
?>

Al imprimir la variable $formateado, se podría ver algo así:

2018-05-08 23:09:55.253292

Incluso si lo ponemos en un ciclo while (para comprobar que los valores cambian) se nota la diferencia. El código (sólo para probar) se ve así:

<?php
$contador = 10;
while($contador > 0){
    $ahora = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));
    $formateado = $ahora->format("Y-m-d H:i:s.u");
    echo "$formateado<br>";
    $contador--;
}
?>

Con estos resultados (al momento de escribir este post):

2018-05-08 23:11:02.897194
2018-05-08 23:11:02.897584
2018-05-08 23:11:02.897611
2018-05-08 23:11:02.897627
2018-05-08 23:11:02.897643
2018-05-08 23:11:02.897659
2018-05-08 23:11:02.897674
2018-05-08 23:11:02.897689
2018-05-08 23:11:02.897704
2018-05-08 23:11:02.897719

 

Y así podemos obtener la fecha actual con microsegundos en PHP.

Obtener nombre del mes actual en PHP

Introducción

Este será un post muy sencillo. Veremos cómo obtener el nombre del mes en el que estamos actualmente, utilizando PHP.

Por ejemplo, el mes en el que escribo esto es en abril. ¿Pero cómo podemos hacer para que PHP lo sepa por nosotros?

Una solución fácil es obtener el número del mes actual, y utilizarlo como índice para tomar una cadena que está dentro de un arreglo.

Eso es justamente lo que haremos.

Obtener nombre del mes actual con PHP

Es simple. Para que esto funcione, nuestro servidor debe tener bien establecida la zona horaria. Aquí hay un post de cómo hacerlo con y sin Laravel.

Luego, llamamos a la función date, y le pasamos como argumento la cadena con la letra n. Eso devolverá un número del 1 al 12 (1 es enero, 12 es diciembre).

Finalmente utilizamos ese número como índice de un arreglo, pero recordemos que los arreglos comienzan en 0, así que lo único que tenemos que hacer es restar 1 a lo que devuelva date.

Si devuelve 12, y le restamos 1, será 11. Y 11 es el índice del último valor de nuestro arreglo.

Aquí el código de ejemplo:

Con eso tenemos para saber cuál es el nombre del mes en el que estamos en PHP. Por defecto los meses están en minúsculas, pero podemos cambiarlos como deseemos.

Sé que no es la solución más eficaz, pero sí es las más sencilla al menos para mí.

Días que tiene un mes en Javascript

Introducción

Hoy veremos cómo obtener el número de días que tiene un mes de cualquier año. Por ejemplo, el mes de Abril del 2018 tiene 30 días, pero bien sabemos que esto cambia dependiendo del mes y también del año (si es o no bisiesto).

Así que investigando me encontré con una función sencillísima de implementar.

Dicho con otras palabras, estimaremos o calcularemos el número o cantidad de días que tiene determinado mes del año actual o de un año cualquiera.

La función que escribiremos devolverá el número entero de días que hay en un mes.

Obtener días que tiene un mes

Aquí la función:

Recibe dos parámetros: el año y el mes, como números. Enero quiere decir 1, Febrero 2, etcétera. El año debe ser algo como 2015, 2016, etcétera.

Nota: esta función, y sólo esta función, cuenta los meses desde el 1 (enero es 1, diciembre 12) pero normalmente, Javascript cuenta los meses desde 0 (enero es 0, diciembre 11). Lo digo para evitar confusiones.

Algunos ejemplos de llamada…

Número de días que tiene un mes según su número y año

Número de días que tiene un mes según su número y año

Todo correcto. Pero podemos mejorar nuestra función

Obtener días del mes por nombre

Mejoremos la función para que reciba el nombre del mes y en base a ello devuelva sus días, así evitamos confusiones calculando el número. Queda así:

Lo único que hacemos es primeramente convertir el nombre a mayúsculas, buscar su índice y sumarle 1. Dado que los meses están ordenados, sólo tenemos que sumar 1.

Por ejemplo, enero tiene el índice 0, pero al sumarle 1 se convierte en 1. Igual diciembre, tiene el 11 pero le sumamos 1 para que se convierta en 12.

Al llamar a la función pasa esto…

Número de días que tiene un mes según su nombre y año

Número de días que tiene un mes según su nombre y año

Obtener días del mes y año actual

Finalmente veamos cómo obtener los días del mes actual. Sólo tenemos que modificar un poco la función original.

Lo que hacemos ahora es crear un nuevo objeto con la fecha actual, obtener el mes y año. Es importante notar que al mes le sumamos uno porque, como ya expliqué arriba, esta función cuenta los meses desde el 1 pero Javascript desde 0.

Si la ejecuto al momento de escribir esto…

Días que tiene el mes actual

Días que tiene el mes actual

Conclusión

Qué fácil e inteligente es este método, aunque yo no soy el autor, yo simplemente trato de explicarlo y facilitar su uso. El autor es quien respondió a esta pregunta de StackOverflow.

Filtro para fechas en AngularJS

Introducción

Una cosa que me gusta de AngularJS es la facilidad que brinda para agregar nuestros propios filtros. Hoy quiero compartir 2 filtros que personalmente utilizo en mis aplicaciones, son para filtrar fechas. Es decir, formatear una fecha para que sea legible por el humano.

Fecha corta

Este filtro puede recibir un objeto de tipo Date, o una cadena que sea válida para instanciar un objeto de tipo Date. Devuelve una fecha como “13/abr/2018”

Después podemos utilizarlo como cualquier filtro.

Fecha expresiva

Este filtro devuelve una cadena muy larga, pero es útil si queremos saber incluso la hora. Devuelve algo como “viernes, 13 de abril de 2018 16:57”.

El filtro es este:

Ejemplo de uso

Aquí dejo un pequeño plunker para demostrar el uso de los filtros.

Ajustando fechas en Javascript

Introducción

No sé si sólo a mí me pasa o si sólo yo ocupo las fechas en Javascript, pero siempre que intento compararlas, algunas salen mal debido al offset. Sé que no se debe confiar en las fechas del cliente, pues se pueden cambiar, pero en alguna ocasión debimos necesitar trabajar con estas y puede que nos haya dado resultados inesperados.
Así que hoy mostraré cómo “ajustar el tiempo” de las fechas de Javascript utilizando getTimezoneOffset.

Descripción del problema

Esto pasa cuando creamos un objeto fecha utilizando una fecha como cadena. En donde la cadena es algo como “2018-03-05” (que representa el 5 de marzo del 2018 ). El objeto se crearía de la siguiente manera:

Nosotros esperamos que la fecha sea el 5 de marzo del 2018 a las 12 de la noche, o a las 00:00:00. Pero al imprimirlo...

Sorpresa. Dice que la fecha es del domingo (sunday) 4 de marzo a las 6 de la tarde. Y nosotros esperábamos que fuera del lunes 5 de marzo a las 0 horas.

Lo que está pasando aquí es que se están restando las horas del Tiempo universal coordinado (creo); en mi caso, como soy de México, resta 6 horas. ¿y si no estamos en México?

Javascript provee una forma de obtener el offset de la fecha. Y con ello podemos arreglar las fechas.

Vamos a ver la solución más abajo.

Solución

Esto es simple, al objeto que ya hemos creado vamos a ponerle el tiempo en milisegundos como el resultado de los milisegundos que ya tiene, sumando los milisegundos que resultan al obtener el offset. Para no confundirnos, se hace así:

Expliquemos esto.

setTime recibe un número, que es el tiempo en milisegundos que han pasado desde la fecha unix.

getTimezoneOffset devuelve en minutos la diferencia de tiempos; en este caso devolverá 360, pues son 6 horas multiplicadas por 60 minutos.

Estos 360 minutos los multiplicamos por 60 para pasarlos a segundos, y luego al resultado lo multiplicamos por 1000 para convertirlo a milisegundos.

Con eso, hacemos la resta. Obtenemos los milisegundos que ya tiene la fecha con getTime y a eso le sumamos el resultado que obtuvimos arriba.

En pocas palabras, se le suman los milisegundos de la diferencia de horas. Si después de hacer esto imprimo la fecha, tengo esto:

Correcto. La fecha ahora sí es del lunes a las 12 de la noche. Y este método, me parece, funciona para cualquier zona horaria.

Así, podemos arreglar y ajustar fechas en Javascript sin perder la cabeza.

Conclusión

Cabe mencionar que esto sólo me ha pasado al instanciar objetos con una fecha ya existente; si se instancia y no se le pasan parámetros, todo va bien. Es decir, si hago lo siguiente todo va bien:

Se desajusta cuando al constructor de Date le paso una cadena como argumento.

Generar fechas aleatorias en un rango usando PHP y mt_rand

Tal vez en alguna ocasión tengamos que generar fechas aleatorias en PHP. En este post explicaré resumidamente cómo podemos hacerlo.

PHP tiene la función date que toma como primer argumento el formato (por ejemplo Y-m-d nos daría algo como 2017-01-25) y como segundo (opcional) el número de milisegundos de los que queremos que nos devuelva la fecha. Es decir, como segundo parámetro podemos poner los milisegundos transcurridos desde el 1 de enero de 1970 para formatearlos como cadena. Para entender mejor, veamos este ejemplo:

<?php
echo date("Y-m-d", 0);
//Salida -> 1969-12-31
?>

Como en este caso le pasamos un 0 como argumento, nos devolvió la fecha del 31 de diciembre de 1969. Se supone que debería devolver la fecha del 1 de enero de 1970, ¿no? pues sí, pero como el tiempo unix está basado en UTC, y nosotros no estamos en la misma zona horaria a veces nos devolverá diferentes resultados. Más información aquí

Entonces, si le ponemos 1000 milisegundos nos dará la fecha del 1 de enero mas un segundo, si le ponemos 3,600,000 ( 1000 * 60 * 60) nos dará la fecha del 1 de enero mas una hora, y así.

Ahora, para sacar una fecha aleatoria podemos simplemente llamar a la función date y pasarle como milisegundos un número aleatorio generado con mt_rand así:

<?php
echo date("Y-m-d", mt_rand(0, 500000000));
//Salida -> 1979-08-08, o una fecha como esas, ya que será aleatoria
?>

Llamamos a date con el mismo formato, pero en lugar de un número definido por nosotros, dejamos que mt_rand se encargue. mt_rand recibe un mínimo y un máximo, y nos devuelve un número que se encuentre entre esos límites.

De esa forma podemos generar una fecha aleatoria. Ahora, ¿qué pasa si queremos generar una fecha aleatoria entre dos fechas? es decir, llamar a la función y decirle “quiero que me des una fecha aleatoria entre el 1 de septiembre del 2017 y el 15 de septiembre del 2018”

Aquí entra otra función, strtotime que convierte una cadena a milisegundos. Es decir, la llamamos así:

<?php
echo strtotime("2017-09-18");
//Salida -> 1505707200
?>

Y dependiendo de la fecha que le pasemos como string, nos dará el número de milisegundos. Obviamente podemos especificar más formatos. Veamos el siguiente ejemplo:

<?php
echo strtotime("2017-09-18 15:52:55");
//Salida -> 1505764375
?>

Aquí le pasamos una fecha junto con la hora. Y nos devuelve el número de milisegundos exactos.

Entonces si combinamos todas estas funciones, al final podremos crear una función que devuelva una fecha aleatoria entre dos fechas que el usuario defina. Vamos a crearla

<?php
/**
	@author parzibyte

	@param string $formato El formato en el que deseamos que devuelva la fecha.
	por defecto es Y-m-d (2017-01-01)

	@param string $limiteInferior Límite inferior desde donde queremos que tome la fecha.
	Por defecto es el 1 de enero de 1970

	@param string $limiteSuperior Límite superior. Por defecto es el 1 de enero del 2038

	@return string La fecha aleatoria
*/
function fecha_aleatoria($formato = "Y-m-d", $limiteInferior = "1970-01-01", $limiteSuperior = "2038-01-01"){
	// Convertimos la fecha como cadena a milisegundos
	$milisegundosLimiteInferior = strtotime($limiteInferior);
	$milisegundosLimiteSuperior = strtotime($limiteSuperior);

	// Buscamos un número aleatorio entre esas dos fechas
	$milisegundosAleatorios = mt_rand($milisegundosLimiteInferior, $milisegundosLimiteSuperior);

	// Regresamos la fecha con el formato especificado y los milisegundos aleatorios
    return date($formato, $milisegundosAleatorios);
}
?>

Veamos algunos ejemplos de cómo podemos usar esta función.

<?php
echo fecha_aleatoria(); // Salida -> Algo como 2023-08-29

echo fecha_aleatoria("Y-m-d H-i-s"); // Salida -> Algo como 2024-03-18 18-20-48

echo fecha_aleatoria("Y-m-d", "2017", "2018"); // Salida -> Algo como 2017-09-19

echo fecha_aleatoria("Y-m-d H:i:s", "2017-09", "2017-10"); // Salida -> Algo como 2017-09-28 19:21:41
?>

Y así podemos jugar mientras el formato sea válido. Si queremos ver más opciones para formatear la fecha, abajo dejo los links a la documentación oficial en donde me guié e inspiré.

 

Cambiar zona horaria o timezone en Laravel

Cambiar la zona horaria en nuestro servidor es de suma importancia, sobre todo si queremos trabajar con fechas.

Por defecto, PHP (y los frameworks que trabajen sobre el lenguaje) viene con una zona horaria preconfigurada; zona que no siempre nos servirá.

Por ejemplo, si somos de México, la fecha y hora estarán mal configuradas, y al querer trabajar con ellas, obtendremos datos que, si bien son correctos, no están ajustados para el tiempo de nuestro país o lugar de origen.

Continue reading…