sajad torkamani

Implementation:

// Given a month and year, return an ISO date.
// Example: month = 7, year = 2020, result = 2020-07-01)
export function monthAndYearToIsoDate(month: number, year: number): string {
  const isValidMonth = month >= 1 && month <= 12
  const isValidYear = year > 0

  if (!isValidMonth || !isValidYear) {
    return 'Invalid date'
  }

  const date = new Date(year, month - 1)

  return `${date.getFullYear()}-${padDatePartWithZero(month)}-01`
}

Vitest spec:

describe('monthAndYearToIsoDate', () => {
  test("returns 'Invalid date' if date is invalid", () => {
    expect(monthAndYearToIsoDate(0, 2020)).toEqual('Invalid date')
    expect(monthAndYearToIsoDate(13, 2020)).toEqual('Invalid date')
    expect(monthAndYearToIsoDate(-1, 2020)).toEqual('Invalid date')

    expect(monthAndYearToIsoDate(5, 0)).toEqual('Invalid date')
    expect(monthAndYearToIsoDate(5, -1)).toEqual('Invalid date')
  })

  test('returns correct ISO date if date is valid', () => {
    expect(monthAndYearToIsoDate(1, 2012)).toEqual('2012-01-01')
    expect(monthAndYearToIsoDate(7, 2020)).toEqual('2020-07-01')
    expect(monthAndYearToIsoDate(12, 1993)).toEqual('1993-12-01')
  })
})
Tagged: Snippets