Recuperar las propiedades de fecha de una API web de C# que parecía estar bien pero tuvo problemas al conectarlo a DevExtreme DateBox. Estaba arrojando un error de 'getFullYear no es una función', así que verifiqué las fechas con esta función que encontré aquí:
let r: any = http.post('/get', { Param1: 2, Param2: 1 }); console.log(r.StartDate); console.log(this.isValidDate(r.StartDate)); r.StartDate = new Date(r.StartDate); r.EndDate = moment(r.EndDate); console.log('Start Date', this.isValidDate(r.StartDate)); console.log('End Date', this.isValidDate(r.EndDate)); isValidDate(d: any): void { if (Object.prototype.toString.call(d) === "[object Date]") { console.log('it is a date'); if (isNaN(d)) { // d.getTime() or d.valueOf() will also work console.log('date object is not valid'); } else { console.log('date object is valid'); } } else { console.log('not a date object'); } } StartDate: "/Date(1657512000000)/" not a date object undefined it is a date date object is not valid Start Date undefined not a date object End Date undefinedNo estoy seguro de por qué esto no ha surgido antes con esta API, pero no quería mirar a DevExpress dado que no puedo producir una fecha válida.
Proporciono esta respuesta para demostrar una forma de analizar la marca de tiempo en la cadena que tiene del siguiente formato, inferido por console.log(r.StartDate); ... /Date(TS)/ :
// Provided the date has the following structure in a string var anyStartDate = "/Date(1657512000000)/"; // Prepare to parse it out by getting the positions of the parentheses var openParens = anyStartDate.indexOf("("); var closeParens = anyStartDate.indexOf(")"); // Parse out the timestamp var timeStampStr = anyStartDate.substring(openParens + 1, closeParens); console.log( timeStampStr ); // 1657512000000 // Convert timestamp to an int. You can do this when you create the obj, but I am separating it here for explanation purposes. var timeStampInt = parseInt( timeStampStr ); // Now create a date object var dateObj = new Date( timeStampInt ); console.log( dateObj ); // (on the machine I'm on): // Outputs: Mon Jul 11 2022 00:00:00 GMT-0400 (Eastern Daylight Time) // Or outputs: 2022-07-11T04:00:00.000ZAhora no sé qué biblioteca (s) está utilizando para manejar las fechas, así que simplemente opté por el objeto Date nativo. Sin embargo, puede usar esta SOLUCIÓN en más información para aplicarla a su código.
El punto es que una vez que se extrae la marca de tiempo, se puede usar para crear un objeto Fecha y, por lo tanto, utilizar todos los métodos que son inherentes a esa clase.
En términos de la "zona horaria", para llegar a UTC, ya está en UTC, pero JavaScript lo formatea según la configuración regional de su computadora. Internamente sigue siendo UTC. Hay una forma de mostrarlo como estrictamente UTC que se encuentra en los documentos.
`