PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Souci format date entre json et variant
Souci format date entre json et variant
Iniciado por Julien V, 06,abr. 2020 08:32 - 2 respuestas
Miembro registrado
134 mensajes
Publicado el 06,abril 2020 - 08:32
Bonjour,

Je rencontre actuellement un souci de formatage de date avec les fonctions Windev VariantVersJSON et JSONVersVariant.
Le VariantVersJSON me sérialise un membre de Variant de type date au format AAAA-MM-JJ
Le JSONVersVariant me renvoie du coup une valeur qui ne sera pas reconnue pour mes futurs traitements.

Ci-dessous mon test unitaire :
date est une Date
date = "20200406"

index est un Variant
index.date = date
Trace( "index.date : " + index.date )
// Affiche index.date : 20200406

JSON est un JSON
JSON = VariantVersJSON( index )
Trace( "json après VariantVersJSON : " + JSON )
// Affiche json après VariantVersJSON : { "date":"2020-04-06" }

index = JSONVersVariant( JSON )
Trace( "index.date après JSONVersVariant : " + index.date )
// Affiche index.date après JSONVersVariant : 2020-04-06

Si je remplace date = "20200406" par date = Datesys(), j'obtiens le même résultat.
Par contre si je remplace index.date = Datesys(), le résultat est correct :
index est un Variant
index.date = DateSys()
Trace( "index.date : " + index.date )
// Affiche index.date : 20200406

JSON est un JSON
JSON = VariantVersJSON( index )
Trace( "json après VariantVersJSON : " + JSON )
// Affiche json après VariantVersJSON : { "date":"20200406" }

index = JSONVersVariant( JSON )
Trace( "index.date après JSONVersVariant : " + index.date )
// Affiche index.date après JSONVersVariant : 20200406


Y-a-t-il un moyen de préserver la date au format AAAAMMJJ pendant les phases de conversion ?
Miembro registrado
499 mensajes
Publicado el 06,abril 2020 - 09:01
Bonjour,

Dans votre premier exemple, vous assignez une variable de type date directement dans le variant. La fonction VariantVersJSON fait alors une sérialisation de la variable de type Date dans le format le plus commun en terme d'interopérabilité (format ISO 8601 https://fr.wikipedia.org/wiki/ISO_8601).

Dans le second exemple, DateSys() renvoie avant tout une chaîne, donc la fonction VariantVersJSON n'y opère pas de transformation particulière (car elle ne "sait pas" que la chaine contient réellement une date).

Vous pouvez donc régler votre problème simplement en forçant la transformation en chaine avant d'envoyer la variable dans le variant. Cela peut se faire avec une concaténation avec une chaine préalable :

date est une Date
date = "20200406"

index est un Variant
index.date = ("" + date) // <-- la concaténation force "date" à être transformée en chaine avant d'être affectée à index.date
Trace( "index.date : " + index.date )
// Affiche index.date : 20200406

JSON est un JSON
JSON = VariantVersJSON( index )
Trace( "json après VariantVersJSON : " + JSON )
// Affiche json après VariantVersJSON : { "date":"20200406" }

index = JSONVersVariant( JSON )
Trace( "index.date après JSONVersVariant : " + index.date )
// Affiche index.date après JSONVersVariant : 20200406
Miembro registrado
134 mensajes
Publicado el 06,abril 2020 - 10:13
Bonjour Benjamin,

Merci pour cette réponse très claire, effectivement en forçant en chaîne ça fonctionne.

Je ne savais pas que DateSys castait implicitement en chaîne de caractères.

Bonne journée !