Hi!
I assume that data.date originally has a String value.
What your code is doing is replacing "data.date" value with a Date object the first time its run, so the second time, instead of having your original String value, it has a Date Object, because you modified your original collection's item.
If you are using "data.date" to set some value on the ListView template, use a variable for that and don't overwrite the original value:
function templateFunction(itemPromise) {
return itemPromise.then(function (item) {
var data = item.data;
var dateObject = new Date(data.date);
...
//use dateObject instead of data.date in your template
});
}