Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427

    ottenere la data del server

    stoc ercando di suare la data del server come riferimento....

    var dd = new Date(<%=Date()%>);
    alert("la data: "+dd.getDate()+"/"+dd.getMonth()+"/"+dd.getFullYear() );

    in questo caso ottengo qualcosa del genere...

    1/0/1970
    :master:

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    La data in javascript si crea con uno dei suoi costruttori:

    new Date(yr_num, mo_num, day_num
    [, hr_num, min_num, sec_num, ms_num])


    parametri obbligati:
    yr_num, mo_num, day_num
    Integer values representing part of a date. As an integer value, the month is represented by 0 to 11 with 0=January and 11=December.

    parametri opzionali:
    hr_num, min_num, sec_num, ms_num
    Integer values representing part of a date.


    Da cui ovviamente la parte server:
    codice:
    <head runat="server">
        <title>Pagina senza titolo</title>
    
        <script language="javascript" type="text/javascript">
    // <!CDATA[
    
    window.onload = window_onload;
    function window_onload()
    {
        var data_server = new Date( <%=DateTime.Now.Year%>, /* anno */
                                    <%=DateTime.Now.Month - 1 %>, /* mese - 1 */
                                    <%=DateTime.Now.Day %>, /* giorno */
                                    <%=DateTime.Now.Hour %>, /* ora */
                                    <%=DateTime.Now.Minute %>, /* minuto */
                                    <%=DateTime.Now.Second %> );/* secondo */
    
    
        //Data formattata g/m/aaaa
        alert("La data del server è: " + data_server.toStringDate());
    
    }
    
    Date.prototype.toStringDate = function ()
    {
        return this.getDate() + "/" + (this.getMonth() + 1) + "/" + this.getFullYear()
    }
    
    // ]]>
    </script>
    </head>

    l'html prodotto è:
    codice:
        <script language="javascript" type="text/javascript">
    // <!CDATA[
    
    window.onload = window_onload;
    function window_onload()
    {
        var data_server = new Date( 2007, /* anno */
                                    3, /* mese - 1 */
                                    14, /* giorno */
                                    9, /* ora */
                                    32, /* minuto */
                                    18 );/* secondo */
    
    
        //Data formattata g/m/aaaa
        alert("La data del server è: " + data_server.toStringDate());
    
    }
    
    Date.prototype.toStringDate = function ()
    {
        return this.getDate() + "/" + (this.getMonth() + 1) + "/" + this.getFullYear()
    }
    
    // ]]>
    </script>
    Pietro

  3. #3
    Originariamente inviato da pietro09
    La data in javascript si crea con uno dei suoi costruttori:

    new Date(yr_num, mo_num, day_num
    [, hr_num, min_num, sec_num, ms_num])
    in ActionScript si crea anche con il timestamp, sicuro non basti quello? (AS è ECMAScript come JS)
    new Date(1263764827);
    o forse in millisecondi
    new Date(1263764827000);
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da andr3a
    in ActionScript si crea anche con il timestamp, sicuro non basti quello? (AS è ECMAScript come JS)
    new Date(1263764827);
    o forse in millisecondi
    new Date(1263764827000);

    se domanda ad agenti {return;} altrimenti {

    1) dato che la domanda forse si riferiva ad asp, ho pensato di suggerire ad agenti di guardare la sintassi javascript. Tra i costruttori di Data, forse quello più facile, da asp, è quello di fornire Anno, Mese-1, Giorno, ora, minuto, secondo.

    2) ho la faccia a terra ma non so che cosa sia ActionScript

    }

    Pietro

  5. #5
    Originariamente inviato da pietro09
    Tra i costruttori di Data, forse quello più facile, da asp, è quello di fornire Anno, Mese-1, Giorno, ora, minuto, secondo.
    ripeto, non so se va .. ma credo che la più facile sia questa, o no?


    new Date(<%=(DateTime.Now.ToFileTime() / 10000)%>)
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da andr3a
    ripeto, non so se va .. ma credo che la più facile sia questa, o no?


    new Date(<%=(DateTime.Now.ToFileTime() / 10000)%>)

    con questo esempio:
    codice:
        var data_server = new Date( <%=DateTime.Now.Year%>, /* anno */
                                    <%=DateTime.Now.Month - 1 %>, /* mese - 1 */
                                    <%=DateTime.Now.Day %>, /* giorno */
                                    <%=DateTime.Now.Hour %>, /* ora */
                                    <%=DateTime.Now.Minute %>, /* minuto */
                                    <%=DateTime.Now.Second %> );/* secondo */
    
        var dd = new Date(<%=((DateTime.Now.ToFileTime() / 10000)).toString(nfi)%> );
    
        //Data formattata g/m/aaaa
        document.getElementById("div1").innerHTML = data_server + "
    " + dd ;
    ottengo:
    Sat Apr 14 13:13:22 UTC+0200 2007
    Tue Apr 13 13:13:22 UTC+0200 2376

    Questo perchè quello che dici è vero, ma a patto che il numero seriale data parta da una stessa data in javascript e in asp o php, che mi pare non sia.

    ps.
    DateTime.Now.ToFileTime() / 10000)).toString(nfi)
    ho dovuto convertire il numero della divisione in stringa formattata col punto decimale, altrimenti avevo errore con la virgola.
    Pietro

  7. #7
    uhm, solitamente i timestamp sono tutti uguali, partono dal 1/1/1970, mi sembra strano non ci sia un modo di convertire una data in time con un solo metodo, magari è così e .NET sfrutta una data file tutta sua, anche se sono certo basti indagare un pò per capire il perchè di quegli esatti 369 anni di differenza e come ovviare.
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da andr3a
    uhm, solitamente i timestamp sono tutti uguali, partono dal 1/1/1970, mi sembra strano non ci sia un modo di convertire una data in time con un solo metodo, magari è così e .NET sfrutta una data file tutta sua, anche se sono certo basti indagare un pò per capire il perchè di quegli esatti 369 anni di differenza e come ovviare.
    i 369 anni si trovano subito

    DateTime.ToFileTime() restituisce un intero a 8 byte privo di segno che rappresenta la data e l'ora come numero di intervalli da 100 nanosecondi trascorsi dall'1/1/1601 12 AM. Mentre javascript richiede il numero di millisecondi trascorsi dal 1/1/1970. E 1970 - 1601 = 369

    così funziona
    codice:
    var data_server = new Date( <%=DateTime.Now.Year%>, /* anno */
    			<%=DateTime.Now.Month - 1 %>, /* mese - 1 */
    			<%=DateTime.Now.Day %>, /* giorno */
    			<%=DateTime.Now.Hour %>, /* ora */
    			<%=DateTime.Now.Minute %>, /* minuto */
    			<%=DateTime.Now.Second %> );/* secondo */
    
    var dd = new Date(<%=Convert.ToInt64(DateTime.Now().Subtract(New DateTime(1970, 1, 1)).TotalMilliseconds)%> );
    
    document.getElementById("div1").innerHTML = data_server + "
    " + dd ;
    
    
    
    
    
    ottengo
    
    Sat Apr 14 20:34:49 UTC+0200 2007
    Sat Apr 14 22:34:49 UTC+0200 2007
    Pietro

  9. #9
    Originariamente inviato da pietro09
    var dd = new Date(<%=Convert.ToInt64(DateTime.Now().Subtract(Ne w DateTime(1970, 1, 1)).TotalMilliseconds)%> );
    ho visto che i ticks partono dall'anno 0 e non dal 1601 ... quindi i conti non mi tornano comunque

    ma visto che si tratta solo di tempi di partenza differenti, questa dovrebbe essere la più breve, confermi?

    codice:
    var dd = new Date(<%=Convert.ToInt64((DateTime.Now.Ticks-621355968000000000)/10000)%>);

    [edit]
    già che ci sono, questa è ancora più immediata
    codice:
    var dd = new Date(<%=Convert.ToInt64(DateTime.Now.Ticks/10000-62135596800000)%>);
    e paragonata a questa
    codice:
    var data_server = new Date( <%=DateTime.Now.Year%>, /* anno */
                                    <%=DateTime.Now.Month - 1 %>, /* mese - 1 */
                                    <%=DateTime.Now.Day %>, /* giorno */
                                    <%=DateTime.Now.Hour %>, /* ora */
                                    <%=DateTime.Now.Minute %>, /* minuto */
                                    <%=DateTime.Now.Second %> );/* secondo */
    perfino più precisa, dato che setta il time esatto, comprensivo dei millisecondi, in questo esempio non presenti.


    [edit 2]
    che poi a pensarci bene non serve nemmeno il Convert.ToInt64 ... confermi?
    codice:
    var dd = new Date(<%=(DateTime.Now.Ticks/10000-62135596800000)%>;
    se confermi, fine del problema
    codice:
    long DateTimeToJavaScriptTime(DateTime now) {
    	return now.Ticks / 10000 - 62135596800000;
    }
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  10. #10
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Gentilissimo Andrea , con tutta sincerità penso che sbagliamo entrambi, e di molto. Stiamo perdendo l'essenza della questione e ci ostiniamo a filosofare sul sesso degli angeli.

    Il problema, se ho capito bene è:

    Debbo creare un oggetto javascript, Data o Vettore o altro, partendo da un linguaggio server, php, asp, aspx o altro: come fare?:

    La mia risposta è:
    1) consulta un buon riferimento javascript:
    questo è l'indice
    http://developer.mozilla.org/en/docs..._1.5_Reference (a mi piace sempre di più)


    questo per le date:
    http://developer.mozilla.org/en/docs...l_Objects:Date

    e questo per i vettori:
    http://developer.mozilla.org/en/docs..._Objects:Array


    Detto questo, il server deve solamente comporre una stringa compatibile con le esigenze javascript.
    A me sembra questa l'essenza della questione.

    ps. non per avere l'ultima parola, ma solo per spiegare quello che ho fatto:
    se javascript vuole i millesecondi a partire dal 1/1/1970, quello che gli debbo dare è la differenza di tempo di oggi e la data di partenza, 1/1/1970, indipendentemente dallo zero iniziale.


    ToFileTime, questa è la funzione che hai usato tu ed è questa che parte dal 1/1/1601

    prima ho usato il basic. In c sarebbe lo stesso
    var dd = new Date(<%=Convert.ToInt64(DateTime.Now.Subtract(new DateTime(1970, 1, 1)).TotalMilliseconds)%> );

    Convert.ToInt64 è necessario per convertire un double in intero, ossia, togliendolo, alert(dd) dà NaN :ignore:



    Ciao
    Pietro

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 © 2024 vBulletin Solutions, Inc. All rights reserved.