Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    28

    titolo a norma: giorni, mesi, anni da data stabilita

    Ciao a tutti, vi espongo brevemente il problema, devo calcolare la distanza da una DATA ad OGGI in ANNI, MESI, GIORNI.
    NB non devo calcolare la differenza fra le date in modi diversi (anni,mesi,giorni),
    il risultato giusto è del tipo 6 anni 12 mesi e 31 giorni.

    ecco il mio codice:

    codice:
    var montharray=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec") function countup(yr,m,d){ var today=new Date() var todayy=today.getYear() if (todayy < 1000) todayy+=1900 var todaym=today.getMonth() var todayd=today.getDate() var todaystring=montharray[todaym]+" "+todayd+", "+todayy var paststring=montharray[m-1]+" "+d+", "+yr var difference=(Math.round((Date.parse(todaystring)-Date.parse(paststring))/(24*60*60*1000))*1) var anni = parseInt(difference/365) if (anni == 1){ anniT = anni + " anno " }else{ anniT = anni + " anni " } var mesi = parseInt((difference-(365*anni))/30) if (mesi == 1){ mesiT = mesi + " mese " }else{ mesiT = mesi + " mesi " } var giorni = (difference-(365*anni))-(mesi*30) if (giorni == 1){ giorniT = giorni + " giorno " }else{ giorniT = giorni + " giorni " } document.write("<h2 style=\"font-size:12px;font-weight:bold;\">Ci conosciamo da "+anniT+mesiT+giorniT+"</h2>") } //enter the count up date using the format year/month/day countup(2004,08,07)

    il problema sorge nel dividere i mesi per 30, non tutti i mesi hanno 30 giorni e quindi il conto sballa.

    Come posso fare per ottenere il risultato sperato tenendo conto degli anni bisestili, i mesi da 28,30,31 giorni?

    Una birra a chi mi aiuta
    grazie in anticipo ragazzi

  2. #2
    Utente di HTML.it L'avatar di skjobax
    Registrato dal
    Jan 2010
    Messaggi
    569
    Perché non usi la classe Date:

    codice:
    var anno = Data.getFullYear();
    var mese = Data.getMonth();
    var giorno = Data.getDay();
    
    var ora = Data.getHour();
    var minuto = Data.getMinutes();
    var secondi = Data.getSeconds();
    var millisecondi = Data.getMilliseconds();
    
    
    setInterval("document.body.getElementById('data').innerHTML='"+giorno+"/"+mese+"/"+anno+""+ora+":"+minuto+":"+secondi+"."+millisecondi+"'", 10);

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    28
    non mi torna molto utile, devo calcolare l'intervallo di tempo tra una data (gg/mm/yyyy) prestabilita e oggi.
    in pratica quanto è trascorso dal giorno x.

    vorrei poter creare una stringa composta da ANNI trascorsi, restanti MESI trascorsi e restanti GIORNI trascorsi.

    mi blocco sul calcolo degli anni bisestili e dei mesi con 28 o 31 giorni, io dividevo arbitrariamente per 30 ma ovviamente poi genero uno scarto di giorni superiore a quello reale

    riposto il codice corretto così magari mi dai una mano

    codice:
    var montharray=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")
    
    function countup(yr,m,d){
    var today=new Date()
    var todayy=today.getYear()
    if (todayy < 1000)
    todayy+=1900
    var todaym=today.getMonth()
    var todayd=today.getDate()
    var todaystring=montharray[todaym]+" "+todayd+", "+todayy
    var paststring=montharray[m-1]+" "+d+", "+yr
    var difference=(Math.round((Date.parse(todaystring)-Date.parse(paststring))/(24*60*60*1000))*1)
    var anni = parseInt(difference/365)
    if (anni == 1){
    	anniT = anni + " anno "
    }else{
    	anniT = anni + " anni "
    }
    var mesi = parseInt((difference-(365*anni))/30)
    if (mesi == 1){
    	mesiT = mesi + " mese "
    }else{
    	mesiT = mesi + " mesi "
    }
    var giorni = (difference-(365*anni))-(mesi*30)
    if (giorni == 1){
    	giorniT = giorni + " giorno "
    }else{
    	giorniT = giorni + " giorni "
    }
    document.write("<h2 style=\"font-size:12px;font-weight:bold;\">Ci conosciamo da "+anniT+mesiT+giorniT+"</h2>")
    }
    //enter the count up date using the format year/month/day
    countup(2004,08,07)

  4. #4
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Non si puo' fare un calcolo preciso in questa maniera sapendo che gli intervalli (mesi e anni) non sono regolari... l'unico e' lasciar fare il calcolo a javascript:
    codice:
    function annimesigiorni(yr,m,d) {
    	var today=new Date() 
    	var pastdate = new Date(yr,m,d)
    
    	var anni = 0;
    	var pippo = new Date();
    	while(pippo>pastdate) { 
    		pippo.setFullYear(pippo.getFullYear()-1)
    		anni++
    	} 
    	pippo.setFullYear(pippo.getFullYear()+1) ; anni--
    
    	var mesi = 0;
    	while(pippo>pastdate) { 
    		pippo.setMonth(pippo.getMonth()-1)
    		mesi++
    	} 
    	pippo.setMonth(pippo.getMonth()+1) ; mesi--
    
    	var giorni = 0;
    	while(pippo>pastdate) { 
    		pippo.setDate(pippo.getDate()-1)
    		giorni++
    	} 
    	giorni--
    
    	document.write("<h2 style=\"font-size:12px;font-weight:bold;\">Ci conosciamo da "+anni+" anni "+mesi+" mesi "+giorni+" giorni</h2>")
    }
    annimesigiorni(2004,08,07)
    ciao

    Edit: se vuoi una cosa un pochino piu' approssimativa puoi usare:
    codice:
    function amg1(yr,m,d) {
    	var today = new Date() 
    	var pastdate = new Date(yr,m,d)
    	diff = new Date(today - pastdate)
    	anni = diff.getFullYear()-1970;
    	mesi = diff.getMonth()
    	giorni = diff.getDate()
    	document.write("<h2 style=\"font-size:12px;font-weight:bold;\">Ci conosciamo da "+anni+" anni "+mesi+" mesi "+giorni+" giorni</h2>")
    }
    amg1(2004,08,07)
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  5. #5
    Utente di HTML.it L'avatar di skjobax
    Registrato dal
    Jan 2010
    Messaggi
    569
    scusa potresti salvare la data X su un database e fare la differenza con quella attuale.
    Tip: salva tutto in formato YYYYMMDD
    cosicché se fai CurrentData - Xdata....
    Sai tutto.
    Non mettere "/" ma fai solo un intero così facendo, ricaverai la differenza tra X e corrente...

  6. #6
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Originariamente inviato da skjobax
    scusa potresti salvare la data X su un database e fare la differenza con quella attuale.
    Tip: salva tutto in formato YYYYMMDD
    cosicché se fai CurrentData - Xdata....
    Sai tutto.
    Non mettere "/" ma fai solo un intero così facendo, ricaverai la differenza tra X e corrente...
    A si? e quanti mesi di differenza ci sono fra dicembre dell'anno prima e gennaio dell'anno dopo?
    E quando mai si fanno operazioni sul database con javascipt lato client?
    e, a proposito di date, hai visto a quando risale la domanda?
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  7. #7
    Utente di HTML.it L'avatar di skjobax
    Registrato dal
    Jan 2010
    Messaggi
    569
    Ups scusate! credevo che fossimo in lato server e che fosse PHP

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.