2013-07-11 13 views
6

Zastanawiam się, czy powinienem usunąć dane czasu normalnie przechowywane. Używamy postgres i node.js gdzie DateTime dostanie wróciliśmy z naszego API jak:Format daty JSON (bez czasu) wracający z interfejsu API

2013-07-01T00:00:00.000Z

Jednak od tej dziedzinie powinny stanowić tylko datę, czuję formatowania przed powrotem jak ta stałaby się bardziej jasne, że czas nie ma znaczenia:

2013-07-01

myśli?

+0

Brzmi sensownie dla mnie. –

+0

Mam również ten problem. Utwórz tabelę użytkowników z kolumną urodzin, typem daty. Powinien więc mieć tylko datę (bez czasu). Uzyskaj czas, gdy zapytanie z węzłem-postgres. – Kiddo

Odpowiedz

3

Jako użytkownik API wolałbym raczej otrzymywać długą formę daty.

z kilku powodów:

  1. Strefa czasowa. Długa Format faktycznie ma strefę czasową wbudowany To ważne.
  2. Parsowanie: większość języków będzie w stanie odczytać ten długi format jako natywny obiekt "Data". W niektórych językach, takich jak C# & Java, ta krótka data będzie musiała zostać wymuszona na użycie prawidłowej strefy czasowej. Unikasz również zamieszania Miesiąc/Dzień z długim formatem.
  3. Porównania: jeśli użytkownik przejdzie w w krótkim terminie, czy Twój interfejs API będzie obsługiwał to poprawnie? Dobry interfejs API musi wyglądać tak samo.
4

Jeśli reprezentujesz datę kalendarza, nie ma czasu ani strefy czasowej. Krótka prezentacja ma więcej sensu.

Niestety, nowa data (ciąg znaków) w wielu implementacjach javascript może zrobić dla ciebie bad things.

new Date('2015-09-23') 
Tue Sep 22 2015 20:00:00 GMT-0400 (Eastern Daylight Time) 

Najprostszym sposobem na wyjście z tego problemu jest, aby nie używać javascript data - ten typ pasuje z datetimeoffset w innych językach. Jest to zły sposób na reprezentowanie wartości daty kalendarza.

Ale i tak prawdopodobnie użyjesz daty javascript. Następną najprostszą "poprawką" jest unikanie standardowych reprezentacji (ponieważ standardowe reprezentacje są interpretowane jako DateTimeOffset z UTC). Oto dwie możliwości:

Użyj "/" zamiast "-".

new Date('2015/09/23') 
Wed Sep 23 2015 00:00:00 GMT-0400 (Eastern Daylight Time) 

Użyj 3-cyfrowego miesiąca - początkowe zera zostaną odrzucone.

new Date('2015-009-23') 
Wed Sep 23 2015 00:00:00 GMT-0400 (Eastern Daylight Time) 

Jeśli masz javascript po stronie klienta i serwera, gotowe. Jeśli masz coś jeszcze po stronie serwera, powinieneś rozważyć, co zrobi język serwera, jeśli zobaczy, że przychodzą niestandardowe formaty dat.