New question

Question:

Date: 11-11-2015 09:11:33 (In Spanish)

Calculo de dias transcurridos de dos fechas[Resolved]

Buenas gente, tengo que calcular los dias transcurridos de la fecha 01-01-1900 a X fecha. Pongamos la fecha actual en esa X 11-11-2015.

Estube leyendo en esto y funciona de diez http://www.desarrolloweb.com/articulos/calcular-dias-entre-dos-fechas-php.html


Pero el tema es que al hacer un fecha menor que la de unix el calculo no lo puede hacer y es logico. y ahora va mi pregunta de que otra forma se puede hacer?

¡Saludos y gracias desde ya!
Tags: DateTime - PHP - Question - Timestamp - timezone Votes: 1 - Answers: 10 - Views: 10 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 11-11-2015 11:43:38 Hola Gonzalo ,

    aqui esta el codigo

    <?php 
    //calculo los milesegundos trancurridos
    $timestamp1 = strtotime('2015-09-01');
    $timestamp2 = strtotime('2015-10-25');
    
    //resto a una fecha la otra
    $segundos_diferencia = $timestamp1 - $timestamp2;
    //echo $segundos_diferencia;
    
    //convierto segundos en días
    $dias_diferencia = $segundos_diferencia / (60 * 60 * 24);
    
    //obtengo el valor absoulto de los días (quito el posible signo negativo)
    $dias_diferencia = abs($dias_diferencia);
    
    //quito los decimales a los días de diferencia
    $dias_diferencia = floor($dias_diferencia);
    
    echo "Dias trancurrido"$dias_diferencia; 
    
     ?>
    
    
    


    saludos
      Votes: 1 - Link answer
     
  • Date: 11-11-2015 12:19:31 Hola Juan gracias por responder, si ese script funciona pero yo nesecito calcular la fecha de 01-01-1900 hasta la fecha actual, la funcion strtotime no me puede convertir ese string en segundos por que esta antes de la fecha unix en segundos 1 de Enero de 1970 00:00:00 GMT. No se si me explico mira te dejo el ejemplo

    <?php
    //calculo los milesegundos trancurridos
    $timestamp1 = strtotime('1900-01-01');
    var_dump($timestamp1);
    
    $timestamp2 = strtotime('2015-10-25');
    //resto a una fecha la otra
    $segundos_diferencia = $timestamp1 - $timestamp2;
    //echo $segundos_diferencia;
    //convierto segundos en días
    $dias_diferencia = $segundos_diferencia / (60 * 60 * 24);
    //obtengo el valor absoulto de los días (quito el posible signo negativo)
    $dias_diferencia = abs($dias_diferencia);
    //quito los decimales a los días de diferencia
    $dias_diferencia = floor($dias_diferencia);
    echo "Dias trancurrido".$dias_diferencia;
     ?>
    


    Estube leyendo algo y de esta forma lo pude arreglar no se, si es la mejor
    Link: http://www.webtutoriales.com/articulos/comparar-fechas-en-php

    <?php
    //Obtengo un arreglo.
    $fechaDefault = explode('-', '1-1-1900');
    
    //Uso la funcion gregoriantojd para convertir de gregoriano a juliano
    $diasDefault = gregoriantojd($fechaDefault[1], $fechaDefault[0], $fechaDefault[2]);
    
    //Obtengo un arreglo con la fecha actual.
    $fechaActual = explode('-', date('j-n-Y'));
    //Uso la funcion gregoriantojd para convertir de gregoriano a juliano
    $diasActual = gregoriantojd($fechaActual[1], $fechaActual[0], $fechaActual[2]);
    
    //Resto para obtener la diferencia de dias.
    $diasTranscurridos = $diasActual - $diasDefault;
    
    echo $diasTranscurridos;
     ?>




    Y tengo una duda sobre la funcion gregoriantojd se que hace un conversión de gregoriano a juliano. El tema es que te de los dias trasncurrido de la fecha 1 de enero de 4714 A.C?

    ¡Saludos!
      Votes: 1 - Link answer
     
  • Date: 12-11-2015 07:37:41 Hola Gonzalo,
    PHP tiene herramientas muy poderosas para eso.
    Te dejo un ejemplo tomado de su página que hace exactamente lo que quieres:

    De forma procedural:
    <?php
    $datetime1 = date_create('1900-01-01');
    $datetime2 = date_create(date('Y-m-d'));
    $interval = date_diff($datetime1, $datetime2);
    echo $interval->format('%R%a days');
    


    OOP:
    <?php
    $datetime1 = new DateTime('1900-01-01');
    $datetime2 = new DateTime(date('Y-m-d'));
    $interval = $datetime1->diff($datetime2);
    echo $interval->format('%R%a days');
    
      Votes: 3 - Link answer
     
  • Date: 12-11-2015 07:52:48 Respecto a la función gregoriantojd.
    La función te regresa el número de días transcurridos a partir del 24 de noviembre del año -4714
    Hay ciertos detalles que supongo considera como el hecho de que no existe el año 0, cambios en los calendarios, etc.
    Es un tema obscuro una vez que vas más allá de la implementación del calendario Juliano.

    Saludos
      Votes: 1 - Link answer
     
  • Date: 12-11-2015 08:31:45 Fuente: >>> Memorias de un Aprendiz <<<

    Funciones PHP para el manejo de calendarios

    PHP dispone de una serie de funciones que permiten convertir fechas según los distintos calendarios. Son estas:
    gregoriantojd(mes,día,año)

    Realiza la cuenta de días julianos correspondiente a la fecha gregoriana pasada en los parámetros mes, día y año.

    El script <?php echo gregoriantojd (9, 27, 1999) ?> nos devolverá: 2451449 que es el día juliano correspondiente a la fecha gregoriana: 27 de setiembre de 1999.

    Este otro script <?php echo gregoriantojd (date("n"), date("j"), date("Y")) ?> nos devolverá el día juliano correspondiente a la fecha actual. Así que, para tu conocimiento y efectos pertinentes, hoy día 12 -11-2015 estamos celebrando el día juliano número 2457339.

    jdtogregorian(nº de días julianos)

    Esta función devuelve en fecha gregoriana –con formato: mes, día y año– el día juliano pasado como parámetro. Por si quieres ir preparando las celebraciones del 2.500.000 día juliano debes saber que coincidirá con la fecha 8/31/2132

    jdtojulian(nº de días julianos)

    Con esta función puedes obtener la fecha juliana a partir de un valor de la Cuenta de Días Juliana . Este script <?php echo jdtojulian(gregoriantojd (date("n"), date("j"), date("Y"))) ?> nos devuelve la fecha actual según el calendario julianoque es 10/30/2015 según el calendario juliano.

    juliantojd(mes,día,año)

    Convierte a Cuenta de días Julianos la fecha pasada (mes, día y año) del calendario juliano. Por ejemplo <?php echo juliantojd(7,25,2011) ?> nos devolverá 2455781 que corresponde a la cuenta de días correspondiente a la fecha 25/7/2001 expresada según el calendario juliano.

    jdtojewish(nº de días julianos)

    Esta función nos devuelve la fecha (mes, día y año) según el calendario judío a partir de una fecha expresada en días julianos.
    <?php echo jdtojewish (gregoriantojd (date("n"), date("j"), date("Y"))) ?> nos dará la fecha actual según el calendario judío que es: 2/30/5776.

    jewishtojd(mes,día,año)

    Nos devuelve el día juliano correspondiente a una determinada fecha del calendario judío. Por ejemplo: <?php echo jdtogregorian(jewishtojd(7,21,5758)) ?> nos devolverá 3/19/1998 que es la fecha gregoriana correspondiente al día 21 del séptimo mes del año 5758 según el calendario judío.

    jdtofrench(nº de días julianos)

    Esta función nos devuelve la fecha según el calendario republicano francés correspondiente al día juliano especificado como parámetro. <?php echo jdtofrench (gregoriantojd (5, 7, 1796)) ?> nos dará la fecha del calendario republicano francés que se corresponde con el 7 de Mayo de 1796 (gregoriano) que según parece es: 8/18/4.

    Sólo convierte fechas comprendidas entre los años 1 y 14 (fechas Gregorianas del 22 de septiembre de 1792 al 22 de septiembre de 1806) que se corresponden con el período de vigencia oficial de este calendario.

    frenchtojd(mes,día,año)

    Convierte una fecha del calendario republicano francés en su equivalente en días julianos. Por ejemplo: <?php echo jdtogregorian(frenchtojd(6,7,8)) ?> nos devolverá 2/26/1800, que es la fecha gregoriana correspondiente al día 7 del sexto mes del año 8 según el calendario republicano francés. Igual que la función anterior sólo convierte fechas comprendidas entres los años 1 y 14 del calendario francés.

    jdmonthname(día juliano, calendario)

    Devuelve del nombre del mes correspondiente al día juliano en el calendario señalado.

    Ejemplos de jdmonthname()
    Fecha
    gregoriana Gregoriano
    abreviado Gregoriano Juliano
    abreviado Juliano Judío Republicano
    francés
    3/1/1803 Jan January Dec December Tevet Nivose
    3/2/1803 Feb February Jan January Shevat Pluviose
    3/3/1803 Mar March Feb February AdarI Ventose
    3/4/1803 Apr April Mar March Nisan Germinal
    3/5/1803 May May Apr April Iyyar Floreal
    3/6/1803 Jun June May May Sivan Prairial
    3/7/1803 Jul July Jun June Tammuz Messidor
    3/8/1803 Aug August Jul July Av Thermidor
    3/9/1803 Sep September Aug August Elul Fructidor
    3/10/1803 Oct October Sep September Tishri Vendemiaire
    3/11/1803 Nov November Oct October Heshvan Brumaire
    3/12/1803 Dec December Nov November Kislev Frimaire
    Parámetro
    calendario 0 1 2 3 4 5


    Los parámetros señalados en la fila inferior son los correspondientes a los tipos de nombres de mes señalados en los encabezados de la tabla.

      Votes: 2 - Link answer
     
  • Date: 12-11-2015 08:33:30 Ernesto una maravilla, desconocia eso muchas gracias. Ahora me pondre a leer.

    Gracias marco como solucionando.

    ¡Saludos!
      Votes: 1 - Link answer
     
  • Date: 12-11-2015 09:01:51 De nada,
    Saludos!
      Votes: 0 - Link answer
     
  • Date: 12-11-2015 10:02:43 Daniel muchas gracias por tu tiempo y explicación. Pero creo que es mas practico el código que propone la documetación PHP.

    ¡Muchas gracias ambos!
      Votes: 1 - Link answer
     
  • Date: 12-11-2015 10:38:07 Gonzalo, lo que te envie son todas funciones PHP para las distintas fecha
    Un saludo
      Votes: 0 - Link answer
     
  • Date: 12-11-2015 12:11:28 Para las que faltan en el aporte de Daniel se puede consultar la documentación oficial de PHP de las funciones de calendario.   Votes: 1 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In
 
frjcbbae garagebible.com