Curious Developer
Curious Developer

Reputation: 725

Find number of months between two Dates in Sinatra (2018-05-23 & 2018-06-22)

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

Answers (1)

Subash
Subash

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

Related Questions