2015-08-21 12 views
5

includo moments.js nel seguente modoselezionare fuso orario predefinito in moments.js

<script src="../static/js/moment-timezone-full.js"></script> 
<script> 
    $('.select_timezone').timezones(); 
</script> 

Ho poi do la selezione fuso orario per il mio utente nel codice HTML come

<div class="row"> 
    <div class="col-lg-4"> 
     <select class="select_timezone" name="select_timezone"></select> 
    </div> 
</div> 

mia domanda è come posso selezionare un fuso orario predefinito? Ho visto che lo si può fare con

moment.tz.setDefault(String); 

ma non capisco come funzionerebbe nel mio setup?

EDIT: La mia applicazione è solo seguendo questo esempio ...

http://www.jqueryscript.net/time-clock/Easy-Timezone-Picker-with-jQuery-Moment-js-Timezones.html

fa davvero nessuno sa una soluzione a questo? carl

EDIT: Vorrei chiarire perché moment.tz.setDefault non funziona. Quando aggiungo la linea

moment.tz.setDefault('America/Los_Angeles'); 

ottengo l'errore javascript

Uncaught TypeError: Cannot read property 'setDefault' of undefined 

mi comprendono momenti come spiegato nel significato pallone mega dimostrativi faccio

from flask.ext.moment import Moment 
... 
moment = Moment() 
... 
moment.init_app(app) 

e nel mio template HTML Io faccio

{% block scripts %} 
{{ moment.include_moment() }} 
{% endblock %} 

time-timezone è incluso nel file js come mostrato sopra. Ho dimenticato qualcosa? Sto solo cercando di impostare il fuso orario predefinito per la selezione

+0

Puoi specificare cosa intendi con "_following this example_"? Hai intenzione di usare __Timezones__ plug-in jQuery per disegnare una casella di selezione? vuoi rendere la tua implementazione simile al plug-in __Timezones__? –

+0

Nota anche che il metodo 'moment.tz.setDefault' che hai indicato nella domanda è un modo corretto per impostare il fuso orario predefinito con la libreria __Moment Timezone__. Quindi, qual è il vero problema qui? –

+0

@carl Basta aggiungere 'onchange' al tuo elemento select e ottenere il valore usando javascript e impostare il fuso orario predefinito us ing 'moment.tz.setDefault'. Cosa c'è che non va? –

risposta

3

Dopo aver guardato quello che hai postato, sembra che si sta utilizzando un plugin per jQuery da https://github.com/firstandthird/timezones che quando prendo uno sguardo al codice, utilizzando un vecchio version of moment.js (versione 2.8.3) come visto a https://github.com/firstandthird/timezones/blob/master/dist/timezones.full.js

Sta anche usando vecchie versioni di time-timezone (che sta tirando in quella parte inferiore del file timezones.full.js, versione 0.2. 4) e il momento.tz.setDefault() non è stato aggiunto fino a una versione successiva. Il più recente è ora 0.4.0. Quindi, consiglierei di mischiare i tuoi file con le versioni più recenti e provare di nuovo tutto sul tuo sistema per vedere se funziona.

UPDATE:

Così, ho guardato il vostro violino, e aggiornato è a your fiddle permettendo

moment.tz.setDefault("America/New_York"); 
$('.select_timezone').timezones(); 

con i miei purè fino moment.js, momento timezone.js e plugin per jQuery codice, e funziona bene. Fondamentalmente tutto ciò che sta facendo il file time-timezone-full.js sta mettendo insieme il momento.js e moment-timezone.js con il codice del plugin jquery.(è elencato come una delle librerie esterne, puoi trovarlo allo https://gist.github.com/iron-man/deedd9efe988318d842a. Ho notato che prenderà solo il primo fuso orario nell'elenco per quell'offset, non quello effettivo specificato, ma che è un problema più grande con la libreria moment-timezone.js e al di fuori dello scopo di questa domanda

+0

Ho aggiornato le versioni a 2.10.6 per moment.js e 0.4.0 per il fuso orario. sfortunatamente non ha risolto il problema. Il messaggio di errore è ancora "Uncaught TypeError: moment.tz.setDefault non è una funzione" – carl

+0

hai aggiornato il file momento-timezones-full.js? questo è quello che sta portando nelle versioni obsolete. Puoi controllare le versioni per essere sicuri di cosa viene caricato facendo cadere un console.log e ispezionando il file js che risponde, dovrebbe avere la versione nei commenti del file. – irnmn

+0

sì ho aggiornato le versioni in time-timezones-full.js ... stampando le versioni conferma che ora uso moment.tz.version = 0.4.0, momento.versione = 2.10.6 ... – carl

1

Per impostazione predefinita mostra il fuso orario della persona che lo guarda, ma è possibile ignorarlo definendolo in modo specifico. Nel vostro esempio si potrebbe fare qualcosa di simile:

<script src="../static/js/moment-timezone-full.js"></script> 
<script> 
    moment.tz.setDefault("America/New_York"); 
    $('.select_timezone').timezones(); 
</script> 
+0

ciao irnmn, grazie per la tua risposta. Ho aggiunto del testo sopra per spiegare l'errore che ottengo quando utilizzo questo approccio. – carl

+0

@carl Puoi provare a farlo in un modo diverso, semplicemente impostando manualmente il fuso orario, invece di impostare l'impostazione predefinita. Sembra che ci siano dei buoni dettagli qui [link] (http://stackoverflow.com/questions/15347589/moment-js-format-date-in-a-specific-timezone?rq=1). Questo presuppone che sia ciò che stai cercando di fare. Come ha commentato qualcun altro, stai cercando di impostare l'opzione predefinita nel menu di selezione o di impostare il fuso orario per tutte le voci? – irnmn

+0

Sto solo provando a impostare il fuso orario predefinito per la selezione – carl