{
  "id": "days-until-the-20th",
  "version": "f9203526a43f",
  "status": "published",
  "name": "Days Until the 20th",
  "question": "Days until the 20th",
  "summary": "Counts the days from today, or any date you choose, to the next 20th of a month, with its date and the 20th after it.",
  "category": "days",
  "subcategory": "countdowns",
  "url": "https://www.acalculator.org/days/days-until-the-20th",
  "markdown": "https://www.acalculator.org/days/days-until-the-20th.md",
  "kind": "function",
  "method": "Find the first date on or after the start date that is the 20th of its month, then count the days from the start date to it.",
  "assumptions": [
    "On the 20th, the count is 0, and the 20th after is the 20th of the next month that has one.",
    "Every month has a 20th, so the next one is never more than a month away.",
    "The start date itself is not counted: from the day before, the count is 1.",
    "Dates are calendar days with no time of day, so a time zone or a daylight-saving change never adds or loses a day.",
    "Start dates from January 1, 1900 to December 31, 2400 work."
  ],
  "inputs": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "type": "object",
    "properties": {
      "from": {
        "title": "Count from",
        "description": "The date to count from. Today, unless you change it.",
        "type": "string",
        "format": "date"
      }
    }
  },
  "outputs": {
    "days": {
      "label": "Days until the 20th",
      "description": "Whole days from the start date to the next 20th of a month; 0 when the start date is the 20th.",
      "format": "integer"
    },
    "date": {
      "label": "Next 20th",
      "description": "The first date on or after the start date that is the 20th of its month.",
      "format": "date-long"
    },
    "after": {
      "label": "The 20th after",
      "description": "The next 20th after that date.",
      "format": "date-long"
    }
  },
  "defaultAnswer": {
    "inputs": {
      "from": "2026-10-19"
    },
    "outputs": {
      "days": 1,
      "date": "2026-10-20",
      "after": "2026-11-20"
    },
    "text": "From October 19, 2026, there is 1 day until the 20th, Tuesday, October 20, 2026."
  },
  "examples": [
    {
      "given": {
        "from": "2026-10-19"
      },
      "expect": {
        "date": "2026-10-20",
        "days": 1,
        "after": "2026-11-20"
      },
      "source": "IETF RFC 3339, section 5.7 (days in each month) and Appendix C (the leap year rule) (https://www.rfc-editor.org/rfc/rfc3339); Python 3 datetime, walking one day at a time from the start date (docs/progress/WP-141/truth_days.py)"
    },
    {
      "given": {
        "from": "2026-12-31"
      },
      "expect": {
        "date": "2027-01-20",
        "days": 20,
        "after": "2027-02-20"
      },
      "source": "IETF RFC 3339, section 5.7 (days in each month) and Appendix C (the leap year rule) (https://www.rfc-editor.org/rfc/rfc3339); Python 3 datetime, walking one day at a time from the start date (docs/progress/WP-141/truth_days.py)"
    },
    {
      "given": {
        "from": "2027-02-01"
      },
      "expect": {
        "date": "2027-02-20",
        "days": 19,
        "after": "2027-03-20"
      },
      "source": "IETF RFC 3339, section 5.7 (days in each month) and Appendix C (the leap year rule) (https://www.rfc-editor.org/rfc/rfc3339); Python 3 datetime, walking one day at a time from the start date (docs/progress/WP-141/truth_days.py)"
    },
    {
      "given": {
        "from": "2028-02-15"
      },
      "expect": {
        "date": "2028-02-20",
        "days": 5,
        "after": "2028-03-20"
      },
      "source": "IETF RFC 3339, section 5.7 (days in each month) and Appendix C (the leap year rule) (https://www.rfc-editor.org/rfc/rfc3339); Python 3 datetime, walking one day at a time from the start date (docs/progress/WP-141/truth_days.py)"
    },
    {
      "given": {
        "from": "2027-01-20"
      },
      "expect": {
        "date": "2027-01-20",
        "days": 0,
        "after": "2027-02-20"
      },
      "source": "IETF RFC 3339, section 5.7 (days in each month) and Appendix C (the leap year rule) (https://www.rfc-editor.org/rfc/rfc3339); Python 3 datetime, walking one day at a time from the start date (docs/progress/WP-141/truth_days.py)"
    }
  ],
  "sources": [
    "IETF RFC 3339, Date and Time on the Internet: Timestamps, section 5.7 (the days in each month) and Appendix C (the leap year rule). https://www.rfc-editor.org/rfc/rfc3339",
    "U.S. Naval Observatory, Leap Years: the Gregorian leap year rule. https://aa.usno.navy.mil/faq/leap_years"
  ],
  "related": [
    "days-until-the-1st",
    "days-until-the-21st",
    "days-until",
    "days-from-today"
  ],
  "changelog": []
}
