OData v2: Edm.DateTime and Edm.DateTimeOffset payload serialization drops milliseconds
I maintainer di solito rispondono entro 1 giorno
@sebxt ci sta già lavorando.
Dal 5/11/2026.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 76/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- typescript
Direzione di ricerca
Inizia da serializeFromMoment in packages/odata-v2/src/de-serializers/converters.ts e segui il modo in cui i serializer di Edm.DateTime e Edm.DateTimeOffset creano i valori /Date(...)/. Aggiungi test di regressione per timestamp con millisecondi, offset e timestamp negativi, quindi esegui i test pertinenti dei serializer OData v2. Il lavoro è completo quando la serializzazione conserva il valore completo in millisecondi dall’epoca in tutti e tre i casi.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Describe the Bug
The default OData v2 serializer for Edm.DateTime and Edm.DateTimeOffset truncates the value to whole seconds. A moment with a millisecond part is sent with 000 milliseconds in create and update payloads, so the backend stores a different value than the one the application set.
Reading a value and writing it back is also lossy: /Date(1556630382123)/ is deserialized correctly, but serialized as /Date(1556630382000)/. For timestamps before 1970 the value is additionally rounded down to the previous second, e.g. moment(-1500) becomes /Date(-2000)/.
URI serialization (filters, keys) is not affected, it uses toISOString() and keeps the milliseconds.
Steps to Reproduce
import moment from 'moment';
import { defaultDeSerializers } from '@sap-cloud-sdk/odata-v2';
const { serialize, deserialize } = defaultDeSerializers['Edm.DateTime'];
serialize(moment(1556630382123));
// '/Date(1556630382000)/'
serialize(deserialize('/Date(1556630382123+0120)/'));
// '/Date(1556630382000+0120)/'
serialize(moment(-1500));
// '/Date(-2000)/'
Expected Behavior
/Date(1556630382123)/, /Date(1556630382123+0120)/ and /Date(-1500)/. The /Date(...)/ format carries milliseconds since the epoch, and the deserializer already keeps them.
Used Versions
@sap-cloud-sdk/odata-v2 4.9.1 (current main).
Additional Context
Root cause is serializeFromMoment in packages/odata-v2/src/de-serializers/converters.ts:
const timestamp = momentInstance.unix() * 1000;
moment#unix() returns whole seconds (floored), so the millisecond part is lost. Using momentInstance.valueOf() keeps it. The Temporal based v2 serializer in @sap-cloud-sdk/temporal-de-serializers already uses epochMilliseconds and does not have this problem.
I have a fix with a regression test ready and can open a PR if you assign this to me.
- Lingua principale
- TypeScript
- Stelle
- 221
- Fork
- 79
- Merge medio
- 13h 27m
- PR unite (30g)
- 22
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di SAP/cloud-sdk-js
-
OData v2: Edm.Time with fractional seconds is parsed with seconds set to 0Forse già presa @sebxt l’ha presa 8 giorni fa. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
SAP/cloud-sdk-js#7043 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 65/100
SAP/cloud-sdk-js#7067 ·
I maintainer di solito rispondono entro 1 giorno
-
feature request tok:pd5
Difficoltà 3/5 1-2 giorni Idoneità per principianti 62/100
SAP/cloud-sdk-js#7058 ·
I maintainer di solito rispondono entro 1 giorno
-
tok:pd5
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
SAP/cloud-sdk-js#7047 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
OpenAPI generator: Operations with multiple request body representations are dropped to single oneForse già presa @davidkna-sap l’ha presa 25 giorni fa. Apertabug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 30/100
SAP/cloud-sdk-js#7039 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di SAP/cloud-sdk-js
Issue simili
-
area:docs documentation good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 12 giorni
-
area:docs good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
thainanluiz/TSSuper#30 ·
-
[analytics-core] getQueryParams does not decode `+` as space and truncates values containing `=`Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
amplitude/Amplitude-TypeScript#2179 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
ci good first issue severity: low
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
TMHSDigital/GH-Arcade#111 ·