2012-11-05 3 views
22

Potrei installarlo da solo, ma la funzionalità è sooo semplice che sembra che qualcun altro probabilmente lo abbia già fatto meglio e più velocemente di quanto avrei potuto con le mie Rotaie app.API Resto gratuito per ottenere l'ora corrente come stringa (fuso orario irrilevante)

Mi serve l'ora corrente come stringa. Mi piacerebbe tornare in meno di un secondo, dovunque il mio visitatore si trovasse nel mondo. (Sto facendo un conto alla rovescia e ha bisogno di essere più preciso del tempo di un eventuale utente spento.) Può essere orario GMT. Non importa, purché indichi il fuso orario (ad esempio "2012-11-05 16:16:50 EST").

(Naturalmente potrei costruirlo, è una semplice API, ma i miei server si trovano sulla costa orientale degli Stati Uniti e sto lavorando all'interno di un intero stack Rails. Filtraggio di qualcuno attraverso un intero grande stack di software come Rails solo per restituire una stringa sembra poco elegante, e sono preoccupati per la latenza per i visitatori lontano dalla costa orientale degli USA)

+5

appena scoperto http://www.timeapi.org/ esempio: http://www.timeapi.org/utc/now.json – thelostspore

+0

@mvdanj grazie, questo è un facile e servizio veloce. Necessario anche questo. – Guus

+0

Questo è difficile, ma funziona: 'wget -q -O - www.worldtimeserver.com/time-zones/cst | grep "Server Time" '. Ovviamente puoi cambiare il fuso orario. Ottenere la data richiede un po 'più di lavoro, ma è nella pagina. Puoi anche tirare il valore del tempo se fai il grep per serverTimeStamp, quindi dovrai fare una conversione ovviamente – kernelsmith

risposta

2

Se si utilizza Rails, è sufficiente creare un file vuoto nella cartella pubblica e utilizzare ajax per ottenerlo. Quindi parse the headers per l'intestazione Data. I file nella cartella Public ignorano lo stack Rails e hanno quindi una latenza inferiore.

+1

503: Over Quota - Questa applicazione ha temporaneamente superato la sua quota di servizio. Per favore riprova più tardi. – MrYellow

+0

Bloccato da chrome (e altri browser moderni?) A meno che il server non restituisca anche intestazioni aggiuntive che lo consentano. – yar1

+0

1/Richieste CORS necessarie per una richiesta di dominio incrociato: Access-Control-Allow-Origin: * (o il tuo dominio) Access-Control-Expose-Headers: Data 2/Osservato su Android 4.1.2: Access- Control-Expose-Headers è ignorato. Otterrai solo l'intestazione Content-Type. Quindi per questo motivo evita la richiesta di domini incrociati. 3/Se ripeti la richiesta Ajax e il browser ha memorizzato nella cache la risposta, potresti non ricevere l'intestazione Data.Quindi, se è necessario eseguire questa richiesta più volte, suggerisco di aggiungere una stringa di query casuale all'URL della richiesta ajax per impedire la memorizzazione nella cache. – figolu

12

TimezoneDb fornisce un'API libera:. http://timezonedb.com/api

GenoNames ha anche un'API RESTful disponibile per ottenere l'ora corrente per una data posizione: http://www.geonames.org/export/ws-overview.html.

Puoi utilizzare Greenwich, Regno Unito se desideri GMT.

+2

Entrambi fanno schifo, sfortunatamente. GeoNames non restituisce secondi, di cui ho bisogno. E sono stato in grado di ottenere una risposta di successo da TimezoneDb solo una volta, soprattutto mi dà un 403 Proibito (anche se sto usando decisamente il formato corretto e la chiave che mi hanno dato). Vorrei che funzionassero! – chadoh

+0

Stai usando Javascript sul frontend? Questo è possibile tramite Javascript senza l'utilizzo di API o framework aggiuntivi. Personalmente, mi piacerebbe seguire questa strada piuttosto che affidarmi a un'API di terze parti. –

+2

Sto usando JavaScript. E funziona, tranne che il tempo del computer dell'utente può essere inaccurato di diversi minuti. Ecco perché preferirei ottenere il tempo tramite una chiamata API a bassa latenza che è garantita per essere accurata entro la deviazione dalla latenza menzionata. – chadoh

8

Questa API fornisce l'ora corrente e diversi formati in JSON - https://www.mashape.com/parsify/format#endpoint-Time. Ecco la risposta del campione:

{ 
    "time": { 
    "daysInMonth": 31, 
    "millisecond": 283, 
    "second": 42, 
    "minute": 55, 
    "hour": 1, 
    "date": 6, 
    "day": 3, 
    "week": 10, 
    "month": 2, 
    "year": 2013, 
    "zone": "+0000" 
    }, 
    "formatted": { 
    "weekday": "Wednesday", 
    "month": "March", 
    "ago": "a few seconds", 
    "calendar": "Today at 1:55 AM", 
    "generic": "2013-03-06T01:55:42+00:00", 
    "time": "1:55 AM", 
    "short": "03/06/2013", 
    "slim": "3/6/2013", 
    "hand": "Mar 6 2013", 
    "handTime": "Mar 6 2013 1:55 AM", 
    "longhand": "March 6 2013", 
    "longhandTime": "March 6 2013 1:55 AM", 
    "full": "Wednesday, March 6 2013 1:55 AM", 
    "fullSlim": "Wed, Mar 6 2013 1:55 AM" 
    }, 
    "array": [ 
    2013, 
    2, 
    6, 
    1, 
    55, 
    42, 
    283 
    ], 
    "offset": 1362534942283, 
    "unix": 1362534942, 
    "utc": "2013-03-06T01:55:42.283Z", 
    "valid": true, 
    "integer": false, 
    "zone": 0 
} 
+1

Bello! Stavo cercando qualcosa di un po 'più semplice (volevo solo una semplice stringa), ma questo è bello sapere. – chadoh

+2

Il collegamento è stato modificato. Adesso è: https://market.mashape.com/parsify/format#time – waste

Problemi correlati