Reputation: 725
I need to find the # of months between two dates i.e. 2018-05-23 & 2018-06-22.
The dates provided have days difference is 30 days. However, they are 2 months. So how can we do this?
I need the output of dates in a correct ascending order.
I tried this,
diffMonth = (date2_year.to_i * 12 + date2_month.to_i) - (date1_year.to_i * 12 + date2_month.to_i)
But, its showing difference is a month.
I also tried this solution difference of month between 2 dates, the result of this link says 1 month as well.
My initial issue is to show the dates in ascending order. I am using this method to sort dates, but if the dates are in within a month, then it's working, but if in between 2 months then its showing wrong order.
arr.sort_by { |h| a = h[:date].to_s }.reverse
I should add my output here this is when dates are as mentioned above.
[{
"date": "Jun-01",
"data": 0
}, {
"date": "Jun-02",
"data": 0
}, {
"date": "Jun-03",
"data": 0
}, {
"date": "Jun-04",
"data": 0
}, {
"date": "Jun-05",
"data": 0
}, {
"date": "Jun-06",
"data": 0
}, {
"date": "Jun-07",
"data": 0
}, {
"date": "Jun-08",
"data": 0
}, {
"date": "Jun-09",
"data": 0
}, {
"date": "Jun-10",
"data": 0
}, {
"date": "Jun-11",
"data": 0
}, {
"date": "Jun-12",
"data": 0
}, {
"date": "Jun-13",
"data": 0
}, {
"date": "Jun-14",
"data": 0
}, {
"date": "Jun-15",
"data": 0
}, {
"date": "Jun-16",
"data": 0
}, {
"date": "Jun-17",
"data": 0
}, {
"date": "Jun-18",
"data": 0
}, {
"date": "Jun-19",
"data": 0
}, {
"date": "Jun-20",
"data": 0
}, {
"date": "Jun-21",
"data": 0
}, {
"date": "Jun-22",
"data": 0
}, {
"date": "May-23",
"data": 0
}, {
"date": "May-24",
"data": 1
}, {
"date": "May-25",
"data": 0
}, {
"date": "May-26",
"data": 0
}, {
"date": "May-27",
"data": 0
}, {
"date": "May-28",
"data": 0
}, {
"date": "May-29",
"data": 0
}, {
"date": "May-30",
"data": 0
}, {
"date": "May-31",
"data": 0
}]
If the dates are within a month, then the output is
[{
"date": "Jun-01",
"data": 0
}, {
"date": "Jun-02",
"data": 0
}, {
"date": "Jun-03",
"data": 0
}, {
"date": "Jun-04",
"data": 0
}, {
"date": "Jun-05",
"data": 0
}, {
"date": "Jun-06",
"data": 0
}, {
"date": "Jun-07",
"data": 0
}, {
"date": "Jun-08",
"data": 0
}, {
"date": "Jun-09",
"data": 0
}, {
"date": "Jun-10",
"data": 0
}, {
"date": "Jun-11",
"data": 0
}, {
"date": "Jun-12",
"data": 0
}, {
"date": "Jun-13",
"data": 0
}, {
"date": "Jun-14",
"data": 0
}, {
"date": "Jun-15",
"data": 0
}, {
"date": "Jun-16",
"data": 0
}, {
"date": "Jun-17",
"data": 0
}, {
"date": "Jun-18",
"data": 0
}, {
"date": "Jun-19",
"data": 0
}, {
"date": "Jun-20",
"data": 0
}, {
"date": "Jun-21",
"data": 0
}, {
"date": "Jun-22",
"data": 0
}, {
"date": "Jun-23",
"data": 0
}, {
"date": "Jun-24",
"data": 0
}, {
"date": "Jun-25",
"data": 0
}, {
"date": "Jun-26",
"data": 0
}, {
"date": "Jun-27",
"data": 0
}, {
"date": "Jun-28",
"data": 0
}, {
"date": "Jun-29",
"data": 0
}, {
"date": "Jun-30",
"data": 0
}]
Or otherwise can we sort them properly?
Upvotes: 0
Views: 54
Reputation: 3168
If you have control over how the date is being generated it'd be better to have year data as well, if you don't care about the year data, you can use this
arr.sort_by {|d| Date.parse(d[:date])}
Hope this helps.
Upvotes: 2