2013-02-22 7 views
7

Mam bazę danych postgre z kolumną znacznika czasu i mam usługę REST w języku Python, która wykonuje zapytanie w bazie danych i zwraca dane do interfejsu JavaScript w celu utworzenia wykresu przy użyciu flot .Konwersja znacznika czasu postgreSQL do znacznika czasu JavaScript w języku Python

Teraz mam problem z tym, że flot może automatycznie obsługiwać datę przy użyciu TIMESTAMP języka JavaScript, ale nie wiem, jak przekonwertować znaczniki czasu Postgre do JavaScript TIMESTAMP (TAK oznaczenie czasowe, a nie data przerwać edytowanie, jeśli nie t znać odpowiedź) w Pythonie. Nie wiem, czy to jest najlepsze podejście (może konwersję można wykonać w JavaScript?). Czy jest jakiś sposób na zrobienie tego?

+0

Nie ma rzeczy jako "znacznik czasu Javascript". Istnieją obiekty JavaScript "Date", to wszystko. Możesz spróbować przekonwertować znaczniki czasu na milisekundy od 1970-01-01 i użyć tej wartości, aby utworzyć obiekt JavaScript "Date". – MaxArt

+0

Niezależnie od biblioteki, której używasz do implementacji 'REST', powinno to być obsługiwane, więc zanim spróbujesz ponownie wymyślić koło, sprawdź, czy biblioteka obsługuje go po wyjęciu z pudełka. –

Odpowiedz

7

Użyj date_part lub wyciągu w postgresie, aby zwrócić znacznik czasu.

select date_part('epoch',mydatefield)*1000 from table; 

Następnie można wysłać tylko, że na ponad bezpośrednio, zauważając, że epoch jest sekund od 1 stycznia 1970 roku, natomiast JS chce milisekund, stąd *1000. Jeśli potrzebujesz, aby faktycznie była datą, po otrzymaniu jej w JavaScript, możesz przekonwertować ją na datę, dzwoniąc pod numer new Date(timestamp_from_pg).

Należy pamiętać, że flot może przetwarzać znaczniki czasu jako liczby, nie ma potrzeby tworzenia obiektów Date.

+0

Dzięki Ryley, o to pytałem, dzięki Bogu, przeczytałeś pytanie, zanim wszyscy redaktorzy zmienili znaczniki czasu dla "daty" w moim pytaniu. –

+0

W zależności od twojej infrastruktury, może to być sensowne, aby otrzymać znacznik czasu z postgresu i zrobić konwersja do epoki w Pythonie. Osobiście staram się zachować wszystkie konwersje w Pythonie, aby zwolnić jak najwięcej zasobów na serwerach baz danych, jak to możliwe. Wiem, że ten typ konwersji jest absurdalnie banalną operacją, ale moje serwery baz danych zawsze pracują ciężej niż serwery WWW. Ponadto, w zależności od tego, czego używasz do interakcji z bazą danych (np. Sterowniki takie jak psycopg2, orms jak sqlalchemy itp.), To, co pobierzesz, może być ciągiem lub datetime-podobnym obiektem dla konwersji. –

2

Nie można wysłać obiektu "datetime" Python lub JavaScript przez JSON. JSON akceptuje tylko bardziej podstawowe typy danych, takie jak ciągi, ints i floats.

Sposób, w jaki zwykle to robię, jest wysyłany jako tekst, za pomocą Pythona datetime.isoformat(), a następnie przeanalizuj go po stronie JavaScript.