Home > other >  getTime() method behaves differently in js
getTime() method behaves differently in js

Time:01-22

I have an array of object like :

[
{
"order_id": 1,
"customer": "Karita Klimochkin",
"country": "Sweden",
"address": "8978 Westridge Park",
"product_title": "Yellow-bellied marmot",
"product_description": "Bread - Flat Bread",
"date": "21/08/2020",
"status": "Delivered"
},
{
"order_id": 2,
"customer": "Ferne Roman",
"country": "China",
"address": "1370 Ridge Oak Pass",
"product_title": "Two-toed sloth",
"product_description": "Asparagus - White, Fresh",
"date": "24/07/2020",
"status": "Completed"
}
] 

I want to sort objects by date. so when I use getTime() method it gives me different result.

orders.map(order => new Date(order.date).getTime())

results are :

1628100000000
NaN

What is the problem here?

CodePudding user response:

You need to convert the date to mm/dd/yyyy format from dd/mm/yyyy so that JS can understand it properly

orders.map(order => {
  const parts= order.date.split("/")
  return new Date(`${parts[1]}/${parts[0]}/${parts[2]}`).getTime()
})

CodePudding user response:

You cannot count on the default date parser to parse your DD/MM/YYYY format correctly. Parsing date strings through the constructor in this way is highly discouraged because it is implementation-dependent. Different browsers/runtimes will parse dates differently.

Instead, manually parse the date yourself and then construct the date object:

orders.map(order => {
  const [d, m, y] = order.date.split('/');
  return  new Date( y, m-1,  d);
})

CodePudding user response:

Friendly reminder: do you have a sorting functionality yet? .map is just an iteration through your array.

More about map: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

Add a sort function based on your date(properly parsed) property and return a new array would help.

CodePudding user response:

The dates are in the wrong format:

// from: "21/08/2020"
let format = obj.date.split('/').reverse().join('-')
//   to: "2020-08-21"

In order to be sortable, dates must be in ms since Jan 1, 1970. Assign the new value to a new key:

obj.pDate = Date.parse(format);

Sort by the new key/value:

let results = orders.sort((a, b) => a.pDate = b.pDate)

Then remove all of the new key/values:

results.map(order => delete order.pDate)

const data = [{
    "order_id": 1,
    "customer": "Karita Klimochkin",
    "country": "Sweden",
    "address": "8978 Westridge Park",
    "product_title": "Yellow-bellied marmot",
    "product_description": "Bread - Flat Bread",
    "date": "21/08/2020",
    "status": "Delivered"
  },
  {
    "order_id": 2,
    "customer": "Ferne Roman",
    "country": "China",
    "address": "1370 Ridge Oak Pass",
    "product_title": "Two-toed sloth",
    "product_description": "Asparagus - White, Fresh",
    "date": "24/07/2020",
    "status": "Completed"
  }, {
    "order_id": 3,
    "customer": "zer00ne",
    "country": "US",
    "address": "123 Main St",
    "product_title": "Jackalope",
    "product_description": "Chili Cheese Fries",
    "date": "12/05/2020",
    "status": "Delivered"
  },
];

const sortOrders = orders => {
  let result = orders.sort((a, b) => {
    a.pDate = Date.parse(a.date.split('/').reverse().join('-'));
    b.pDate = Date.parse(b.date.split('/').reverse().join('-'));
     return a.pDate - b.pDate;
  })
  result.map(order => delete order.pDate);
  return result;
};

console.log(sortOrders(data));

  •  Tags:  
  • Related