2017-06-23 1 views
0

Ma question est assez simple mais je n'arrive pas à trouver un moyen facile de la résoudre.Date affichée dans NodeJS n'est pas la même que la date dans MySQL, comment réparer?

J'ai une application qui est séparée en trois niveaux, angulaire 2 pour le front-end, NodeJS pour le back-end et MySQL pour la persistance.

La question que j'ai concerne la base de données et le back-end.

Je cette table dans ma base de données où une date est enregistrée dans un format de date (je sais que ce ne doit pas être appelé horodatage, mais ce n'est pas le point), et PHPMyAdmin je peux visualiser les lignes suivantes:

Database lines, notice the day

Ensuite, mon script NodeJS communique avec la base de données et obtient les résultats suivants:

enter image description here

Comme vous pouvez le voir la date a été influencé b y une sorte de fuseau horaire. Ce que je veux savoir, c'est quelle est la meilleure solution pour avoir le même résultat des deux côtés (la valeur correcte est celle que vous voyez dans la base de données).

+0

Lors de la sélection CURDATE() et CURTIME() dans ma base de données l'heure est affichée correctement si le problème vient de la partie back-end –

+0

Une date JavaScript peut être représenté comme UTC ou selon l'heure locale de l'ordinateur, selon les méthodes 'Date' utilisées pour ce faire. Un temps MySQL peut être stocké dans UTC ou dans le fuseau horaire de MySQL (selon le type de colonne) et est toujours affiché dans le fuseau horaire de MySQL. –

+0

Vous devez montrer votre code, pas seulement le problème. Voter pour fermer. Veuillez lire [Comment créer un exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve) et [Comment poser une bonne question?] (Https://stackoverflow.com/help/ comment demander) du centre d'aide. Merci. –

Répondre

0

Ok, j'ai finalement trouvé la solution. Je ne comprends pas vraiment pourquoi cela fonctionne, mais c'est le cas. Lors de la création du pool de connexions, l'ajout de dateStrings: 'date' semble résoudre le problème.

est ici un exemple:

var pool  = mysql.createPool({ 
    connectionLimit : 100, //important 
    host  : 'localhost', 
    user  : 'root', 
    password : 'root', 
    database : 'ohmyhairdb', 
    debug : false, 
    dateStrings: 'date' 
}); 
+0

Notez que vous devriez stocker vos horodatages dans MySQL dans un format agnostique de fuseau horaire (c'est-à-dire l'heure UTC). –

+0

Je suis d'accord avec vous mais dans ce cas, il s'agit d'une application qui sera utilisée par une seule personne en particulier. Si je dois adapter l'application à un public plus large, j'envisagerai d'en faire un véritable horodatage –

-1

Il est préférable d'utiliser l'horodatage lors de l'enregistrement de la date dans le db. Espérons que cela fonctionne.

+0

Je préfère ne pas changer la structure de la base de données et la logique générale derrière, mais merci pour votre proposition –