разница в дате и вставка в тот же массив с помощью JS - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть один массив propertyDetails, и в этом массиве у меня есть два поля с именем activationDate & deActivationDate.Я хочу взять activationDate & deActivationDate из propertyDetails, вычислить разницу в дате и вставить ее в массив propertyDetails.Как этого добиться?

мой JS-код

var doc = 
        {
            "name" : "property",
            "propertyDetails" : [
                {
                    "activationDate" : "2018-05-06 20:01:43",
                    "deActivationDate" : "2018-05-07 14:18:52"
                },
                {
                    "activationDate" : "2017-12-15 20:22:18",
                    "deActivationDate" : null
                }
            ]
        }
console.log(doc.propertyDetails[0].pedagogyID);

//date difference calculation code
var date1 = new Date('2013/11/04 00:00:00');
var date2 = new Date('2013/11/05 10:10:10'); //less than 1
var start = Math.floor(date1.getTime() / (3600 * 24 * 1000)); //days as integer from..
var end = Math.floor(date2.getTime() / (3600 * 24 * 1000)); //days as integer from..
var daysDiff = end - start; // exact dates

Примечание: deActivationDate null означает, взять текущую дату и время и вычислить

Ответы [ 6 ]

0 голосов
/ 14 декабря 2018

const doc = {
  "name": "property",
  "arrayname": [{
      "activationDate": "2018-05-06 20:01:43",
      "deActivationDate": "2018-05-07 14:18:52"
    },
    {
      
      "activationDate": "2017-12-15 20:22:18",
      "deActivationDate": null
    }
  ]
}

doc.arrayname.forEach(entry => {
  const {
    deActivationDate,
    activationDate
  } = entry;
  const activition = Math.floor(new Date(activationDate).getTime() / (3600 * 24 * 1000));
  const deActivition = Math.floor(new Date(deActivationDate).getTime() / (3600 * 24 * 1000));
  entry.dateDifference = deActivition - activition;
});

console.log(doc);

Что-то в этом роде подойдет.Измените фрагмент, и он должен работать для вас.

0 голосов
/ 14 декабря 2018

Вы можете использовать для каждого оператора Array https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

var doc = 
        {
            "name" : "name",
            "Key" : [
                {
                
                    "activationDate" : "2018-03-06 20:01:43",
                    "deActivationDate" : "2018-05-05 14:18:52"
                },
                {
                 
                    "activationDate" : "2017-12-15 20:22:18",
                    "deActivationDate" : null
                }                ]
        }

doc.Key.forEach(function(item){
  var date1 = new Date(item.activationDate);
  var date2 = !item.deActivationDate?new Date():new Date(item.deActivationDate); //less than 1
  var start = Math.floor(date1.getTime() / (3600 * 24 * 1000)); //days as integer from..
  var end = Math.floor(date2.getTime() / (3600 * 24 * 1000)); //days as integer from..
  
  item.daysDiff=end - start;
})

console.log(doc);
0 голосов
/ 14 декабря 2018

Вы должны перебрать свой массив propertyDetails и добавить разницу в соответствующем объекте.

var doc = 
{
    "name" : "property name",
    "propertyDetails" : [
        {   
            "activationDate" : "2018-05-06 20:01:43",
            "deActivationDate" : "2018-05-05 14:18:52"
        },
        {
            "activationDate" : "2017-12-15 20:22:18",
            "deActivationDate" : null
        },
        {
            "activationDate" : "2017-12-15 20:21:11",
            "deActivationDate" : null
        }
    ]
}

// Loop though all the topics
for (var i = 0; i < doc.propertyDetails.length; i++) {

    // If they have a deactivation date, calculate the diff and put into an attribute named "dateDifference"
    if (doc.propertyDetails[i].deActivationDate == null) {
        doc.propertyDetails[i].deActivationDate = new Date()
    }

    doc.propertyDetails[i].dateDifference = getDaysDiff(new Date(doc.propertyDetails[i].activationDate), new Date(doc.propertyDetails[i].deActivationDate))
}

// Function to simplify and avoid code repetition.
function getDaysDiff(begin, end) {
    var beginDays = Math.floor(begin.getTime() / (3600 * 24 * 1000))
    var endDays = Math.floor(end.getTime() / (3600 * 24 * 1000))
    return endDays - beginDays
}
0 голосов
/ 14 декабря 2018

Я бы использовал библиотеку типа moment.js или подобную.Момент позволит вам делать такие вещи, как:

...
const start = moment(date1.getTime())
const end = moment(date2.getTime())

const dateDiff = start.diff(end, 'days')
....

Специальные документы по разнице моментов здесь .

0 голосов
/ 14 декабря 2018
var doc = 
    {
        "name" : "name",
        "Key" : [
            {

                "activationDate" : "2018-05-06 20:01:43",
                "deActivationDate" : "2018-05-05 14:18:52"
            },
            {

                "activationDate" : "2017-12-15 20:22:18",
                "deActivationDate" : null
            },
            {

                "activationDate" : "2017-12-15 20:21:11",
                "deActivationDate" : null
            }
        ]
    }

// так вы можете обновить существующий массив.

doc.Res= doc.Key.map(topic => {

    if(!topic.deActivationDate){ topic.deActivationDate = new Date() }
    //date difference calculation code
    var date1 = new Date(topic.activationDate);
    var date2 = new Date(topic.deActivationDate); //less than 1
    var start = Math.floor(date1.getTime() / (3600 * 24 * 1000)); //days as integer from..
    var end = Math.floor(date2.getTime() / (3600 * 24 * 1000)); //days as integer from..
    var daysDiff = end - start; // exact dates
    return Object.assign({dateDifference: daysDiff }, topic);
});
console.log(doc.Res);
0 голосов
/ 14 декабря 2018

Мне кажется, вы должны просто иметь возможность перебирать объект, как

var counter = 0;
 for (details in doc.TopicDetails) {
    doc.TopicDetails[counter].differenceInDays = daysDiff;
    counter += 1;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...