SharePoint 2013: Modificar la Fecha de un elemento mediante el modelo de objeto de JavaScript

Si no me he vuelto loco, algo tan sencillo como añadir/modificar un valor de un campo de tipo fecha en una lista personalizada puede convertirse en una odisea utilizando el modelo de objetos de JavaScript.

En primer lugar intente introducir una fecha introduciéndole el mismo formato que en el modelo de objetos de servidor es decir con el formato ISO8601 es decir yyyy-mm-ddThh:mm:ssZ tras un primer intento me da el error que el formato de fechas no es correcto.

El segundo intento voy a probar a crearme un objeto new Date() de JavaScript e intentar asignarlo directamente al campo que quiero modificar de la siguiente forma:

var year=2013;

var month= 09;

var day= 10;

var fecha= new Date(year, month, day);

Este caso es todavía mucho más curioso porque funciona en algunos navegadores por ejemplo en Google Chrome funciona perfectamente y en Internet Explorer y Mozilla no funciona. Intento depurar un poco y ver si el problema lo tengo en que la variable Date me da un valor diferente según el navegador. Tras comprobar el valor devuelve la función Date y comprobar que es el mismo en los tres navegador. Tengo todavía muchas curiosidad del porque. 

Bueno pues tras mirar mucho lo que esta ocurriendo es que SharePoint 2013 esta esperando la fecha en formato UTC y sino esta en este formato pues falla. Para solucionarlo en un primer lugar tenemos que crearnos la fecha tal y como hemos creado en el anterior caso y convertimos este valor obtenido en formato UTC de la siguiente forma:

function addBrowserUtcOffset(date) {
    var utcOffsetMinutes = date.getTimezoneOffset();
    var newDate = new Date(date.getTime());
    newDate.setTime(newDate.getTime() - (utcOffsetMinutes*60*1000));

    return newDate;
}

La verdad es que no se porque motivos SharePoint en esta versión se comporta de forma diferente dependiendo del modelo de objetos que se utiliza, es algo que no lo entiendo y que puede causar un tanto de confusión en los programadores. Que conste que me parece bien que se adapte, pero que se adapte para lo bueno tambien. Por ejemplo en la API Rest es algo tedioso que nos devuelvan campos que no vamos a utilizar nunca, que se haga una API más para el uso de los desarrolladores.

Pero bueno sabiendo la solución se puede poner remedio 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *