8768 sujets

Développement web côté serveur, CMS

Bonjour,

Sous node.js, après avoir interrogé une base de donnée, un initialisateur d'objet me retourne quelque chose comme ceci :
let data = {
  _id: '41',
  _gender: true,
  _first_name: 'Henri',
  _last_name: 'de Lubac',
  _birth_date: 1896-02-19T23:50:39.000Z,
  _death_date: 1991-09-03T22:00:00.000Z,
  _description: 'Henri Sonier de Lubac, né à Cambrai, etc...'
}

Je sais formater les dates avec moment.js :
moment(data._birth_date).format('L') // date format: jj/mm/yyyy

Mais je n'arrive pas à muter les nouvelles valeurs obtenues pour des propriétés _birth_date et _death_date avec l'opérateur set. Il y a visiblement quelque chose que je loupe dans la syntaxe.

Merci pour votre aide éventuelle.
Modifié par Olivier C (24 Apr 2020 - 00:06)
Modérateur
Et l'eau,

Avec un strtotime, ça devrait aider (ne t'inquiète pas, tu peux lui balancer ton format ISO Smiley cligne ). Je vois cependant une date antérieur à 1970. Et là pour le coup, ça risque d'être compliqué.
edit : j'arrive à avoir un résultat convaincant aux alentours de 1902. Bien sûr, j'ai un résultat négatif.
Modifié par niuxe (24 Apr 2020 - 02:23)
Bonjour Niuxe. Je sais formater les dates - moment.js n'étais qu'un exemple et ça marche très bien d'ailleurs* - mais je ne sais pas les muter, les replacer dans l'initialisateur d'objet avec la nouvelle valeur. D'où ma question.

{ // input
  _birth_date: 1896-02-19T23:50:39.000Z,
  _death_date: 1991-09-03T22:00:00.000Z
}

{ // résultat à injecter en output
  _birth_date: 19/02/1896,
  _death_date: 03/09/1991
}


Pour donner le contexte : je reçois les résultats de ma db sous forme d'objet et doit les garder comme tel pour les injecter à ma vue (j'utilise Express 4).

PS : pour la petite histoire, la limitation des dates dont tu parles est lié au timestamp (1970 mini - 2038 max), mais cette limitation a définitivement été repoussée avec le passage des systèmes en 64 bits et une base de donnée compatible (je suis sous postgres, mais MySQL a dû aussi se mettre à niveau).
Modifié par Olivier C (24 Apr 2020 - 07:14)
Modérateur
oh mon dieu Smiley eek , hier soir j'ai pas vu l'erreur Smiley confused . Normal que tu ne puisses pas setter l'objet. La syntaxe est fausse.

Ton objet doit être formater comme cela :

let un_obj_static_ou_literal = {
  _birth_date: "1896-02-19T23:50:39.000Z",
  _death_date: "1991-09-03T22:00:00.000Z"
};


Au passage, certaines personnes utilisent plutôt const au lieu de let. Perso, je ne suis pas d'accord avec const dans ce cas. D'ailleurs je vois souvent const dont la portée est équivalent à let. Mais ce n'est qu'un avis et un point de vue. Bref, pour changer la valeur d'une clef, c'est soit comme ceci :

un_obj_static_ou_literal._birth_date = "quelque chose";


soit comme cela :

un_obj_static_ou_literal["_birth_date"] = "quelque chose";


Olivier C a écrit :
pour la petite histoire, la limitation des dates dont tu parles est lié au timestamp (1970 mini - 2038 max), mais cette limitation a définitivement été repoussée avec le passage des systèmes en 64 bits et une base de donnée compatible (je suis sous postgres, mais MySQL a dû aussi se mettre à niveau).


Exact pour 2038 et 64bits ! Postgres est une très bonne base de données. Smiley smile
Modifié par niuxe (24 Apr 2020 - 11:31)
Meilleure solution
niuxe a écrit :
oh mon dieu Smiley eek , hier soir j'ai pas vu l'erreur Smiley confused . Normal que tu ne puisses pas setter l'objet. La syntaxe est fausse.

Ce n'est pas correct en front mais tout à fait valable en back, de toute façon ce n'est pas moi qui la génère mais un plugin pour node on ne peut plus connu pour postgres.

Quoi qu'il en soit tu as raison et j'étais dans la lune, la solution était évidement celle que tu propose et je t'en remercie :
// code en version "front"
let data = {
  _id: '41',
  _gender: 'true',
  _first_name: 'Henri',
  _last_name: 'de Lubac',
  _birth_date: '1896-02-19T23:50:39.000Z',
  _death_date: '1991-09-03T22:00:00.000Z',
  _description: 'Henri Sonier de Lubac, né à Cambrai, etc...'
}
console.log(data) // renvoie la même chose

data._birth_date = '19/02/1896'
data._death_date = '03/09/1891'
console.log(data) // renvoie l'initiateur d'objet avec les nouvelles valeurs


PS : le 64 bit permet une rallonge de 20 fois l'âge de l'univers au moins, donc ça va le faire !

PS du PS : pour les variables, let et const on la même portée ; const peut être "settée" dans la limitation d'une "logigue" pour la variable, par exemple on peut ajouter une valeur de tableau à un tableau déjà existant. Mais moi aussi je penche pour let dans ce cas d'utilisation (je ne m'y connais pas grand chose, je m'y colle tout juste).
Modifié par Olivier C (27 Apr 2020 - 17:42)