2012-08-22 11 views
6

in un database SQL ho un elenco di volte da diversi fusi orari, ma io non avere né la cura per il corrispondente informazioni fuso orario:formato una data in Javascript senza conversione al fuso orario locale

2012-01-01 01:02:03 
2012-07-01 04:05:06 

per l'emissione I 'Mi piacerebbe formattarli usando Javascript. Ho provato:

var text = input.replace(' ','T'); // SQL -> ISO8601 
var d = new Date(Date.parse(text)); 
hours = d.getHours(); 

Il problema è che in Chrome la data viene interpretata come essere in UTC e convertito al mio fuso orario locale, in modo da ottenere:

2 
6 

mentre in Firefox viene interpretato come ora locale e ottengo ciò che voglio:

1 
4 

Così, c'è una soluzione migliore con l'oggetto Data o sono bloccato con la divisione del strin g?

risposta

5

L'unica soluzione che ho trovato sta sostituendo - con /:

input = "2012-01-01 01:02:03"; 
var text = input.replace('-', '/'); 
var d = new Date(Date.parse(text)); 
hours = d.getHours(); 

Nel mio caso la voce è stata 2013-05-22T16:45:00Z così ho sostituito T e Z così:

input = "2013-05-22T16:45:00Z"; 
var text = input.replace(/[TZ]/, '').replace('-', '/'); 
var d = new Date(Date.parse(text)); 
hours = d.getHours(); 

in questo modo offerte JavaScript con senza sapere nulla di fuso orario e smettere di agire in modo intelligente.

+0

Quindi in altri casi con fusi orari, è sufficiente rimuoverlo manualmente o da Regex –

+0

come qui http://stackoverflow.com/questions/6348431/best-way-to-remove-edt-from-a-date-returned -via-javascript-with-tolocalestring –

+0

In Firefox 'Date.parse (" 2013-05-22 16:45:00 ")' restituisce NaN. – AndreKR

0

Penso che per fare con le date sarà necessario utilizzare alcuni "framework" Date come Globalize jQuery plugin o Datejs per ottenere il comportamento del browser. In questo modo, sarai in grado di configurare un modello da utilizzare nell'analisi della data.

Problemi correlati