Pregunta:
Fecha: 18-08-2018 02:14:43
(En Español)
Dicha diferencia la tomo en javascript desde timestamp (milisegundos a partir del 1 de Enero de 1970)
Ello hace que tenga un desfase de
- 1 día por cada año bisiesto (si estoy calculando la edad de una persona que tiene 40 años acumulña diez días)
- 5 días por cada año natural (ver ejemplo donde a falta de un día tengo 12 meses y 4 días)
Conozco la librería momentjs pero ..
¿Podría subsanar este error sin acudir a dicha librería?
Gracias Votos: 1 - Respuestas: 2 - Vistas: 11 Compartir en: Google Facebook Twitter LinkedIn Link
Corregir diferencias entre fechas[Resuelta]
Mi consulta viene de la mano de la diferencia entre dos fechas dadas.Dicha diferencia la tomo en javascript desde timestamp (milisegundos a partir del 1 de Enero de 1970)
var hoy = new Date('2018-08-17');
var date = new Date('2017-08-18');
var dif_aino = Math.floor(( hoy - date) / 31536000000);
// 1000 * 60 * 60 * 24 * 365 = 31536000000
var dif_mes = Math.floor((( hoy - date) % 31536000000) / 2592000000);
// 1000 * 60 * 60 * 24 * 30 = 2592000000
var dif_dia = Math.floor(((( hoy - date) % 31536000000) % 2592000000) / 86400000);
// 1000 * 60 * 60 * 24 = 86400000
document.write('La diferencia entre fechas es de '+ dif_aino + ' Años, ' + dif_mes + ' Meses, '+ dif_dia + ' Días');
// La diferencia entre fechas es de 0 Años, 12 Meses, 3 Días Ello hace que tenga un desfase de
- 1 día por cada año bisiesto (si estoy calculando la edad de una persona que tiene 40 años acumulña diez días)
- 5 días por cada año natural (ver ejemplo donde a falta de un día tengo 12 meses y 4 días)
Conozco la librería momentjs pero ..
¿Podría subsanar este error sin acudir a dicha librería?
Gracias Votos: 1 - Respuestas: 2 - Vistas: 11 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 18-08-2018 18:29:33 Muchas lineas innecesarias para calcular la diferencia de una fecha, podría simplemente utilizar diff para ello:
$fechaA = new DateTime("2018-01-01"); $fechaB = new DateTime("2018-08-18"); $final = $fechaA->diff($fechaB); printf('%d años, %d meses, %d días, %d horas, %d minutos', $final->y, $final->m, $final->d, $final->h, $final->i);
esto me retorna:
0 años, 7 meses, 17 días, 0 horas, 0 minutos
Claro no me da los minutos ni segundos porque no se los estoy pasando en la fecha, por otro lado podrías calcular mas precisa la fecha si agregas la zona horaria asociada al usuario que te visita, hay servicios que te ayudan en esto con la ip del visitante, aunque tendrías problemas con las IPs moviles, en todo caso quedaria asi:
date_default_timezone_set('America/Caracas'); $fechaA = new DateTime("2018-01-01"); $fechaB = new DateTime("2018-08-18"); $final = $fechaA->diff($fechaB); printf('%d años, %d meses, %d días, %d horas, %d minutos', $final->y, $final->m, $final->d, $final->h, $final->i);
Eso evitaría que el calculo se realice con la hora de tu servidor la cual podría estar desfasada en contra de la del visitante.
Claro veo que lo haces con JS, así que estos ejemplos estan del lado del servidor, entodo caso ya te coloco unos asociados a JS. Votos: 3 - Link respuesta -
Fecha: 19-08-2018 03:12:47 Gracias Carlos.
Sabía que con PHP era más sencillo.
Claro que buscaba hacerlo en Javascript, dado que soy reacio a utilizar PHP dentro de Javascript.
Además, dado que las fechas las tomo de otros registros, no utilizo la hora actual y no me afecta ni la hora local ni que el usuario tenga la hora desfasada.
Posiblemente lo tome desde un campo hidden.
Gracias Votos: 1 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
