{
  "id": "half-birthday",
  "version": "53058eb05e76",
  "status": "published",
  "name": "Half Birthday Calculator",
  "question": "When is my half birthday?",
  "summary": "Finds your half birthday, six months after your birthday, the date of the next one, the days until it, and the age you turn, such as 30½.",
  "category": "days",
  "subcategory": "age",
  "url": "https://www.acalculator.org/days/half-birthday-calculator",
  "markdown": "https://www.acalculator.org/days/half-birthday-calculator.md",
  "kind": "function",
  "method": "Half birthday = birthday + 6 calendar months (the same day, or the last day of the month when that month is shorter); the next one is the first such date on or after the count-from date.",
  "assumptions": [
    "A half birthday is six calendar months after the birthday, not 182 or 183 days.",
    "When the month six months later is shorter (August 31 to February), the half birthday is that month’s last day.",
    "Each half birthday is counted from the date of birth, so August 31 gives February 29 in leap years and February 28 otherwise."
  ],
  "inputs": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "type": "object",
    "properties": {
      "birth": {
        "title": "Date of birth",
        "description": "Your birthday, with the year you were born.",
        "type": "string",
        "format": "date"
      },
      "on": {
        "title": "Count from",
        "description": "The date to count from. Today, unless you change it.",
        "type": "string",
        "format": "date"
      }
    }
  },
  "outputs": {
    "next": {
      "label": "Next half birthday",
      "description": "The first half birthday on or after the count-from date, with its weekday.",
      "format": "date-long"
    },
    "days": {
      "label": "Days until your half birthday",
      "description": "Days from the count-from date to the next half birthday; 0 when it is that day.",
      "format": "integer"
    },
    "countdown": {
      "label": "Countdown",
      "description": "The days to the next half birthday in words: “today”, “1 day to go”, or “N days to go”.",
      "format": "text"
    },
    "turning": {
      "label": "Age on that half birthday",
      "description": "The age in years on the next half birthday, a whole number and a half.",
      "format": "number"
    },
    "every": {
      "label": "Half birthday each year",
      "description": "The month and day of the half birthday: six months after the birthday.",
      "format": "text"
    },
    "first": {
      "label": "First half birthday",
      "description": "The date you turned six months old.",
      "format": "date-long"
    }
  },
  "defaultAnswer": {
    "inputs": {
      "birth": "1995-06-15",
      "on": "2026-10-02"
    },
    "outputs": {
      "next": "2026-12-15",
      "days": 74,
      "countdown": "74 days to go",
      "turning": 31.5,
      "every": "December 15",
      "first": "1995-12-15"
    },
    "text": "Your next half birthday is Tuesday, December 15, 2026, 74 days to go, when you turn 31.5."
  },
  "examples": [
    {
      "given": {
        "birth": "1995-06-15",
        "on": "2026-10-02"
      },
      "expect": {
        "next": "2026-12-15",
        "days": 74,
        "turning": 31.5,
        "every": "December 15",
        "first": "1995-12-15"
      },
      "source": "hand calculation in content.mdx: June 15 + 6 months = December 15; October 2 to December 15, 2026 is 29 + 30 + 15 = 74 days; The Python Standard Library, datetime (Gregorian calendar day counts), https://docs.python.org/3/library/datetime.html, retrieved 2026-10-02: date(2026, 12, 15) − date(2026, 10, 2) = 74 days"
    },
    {
      "given": {
        "birth": "2001-08-31",
        "on": "2027-01-10"
      },
      "expect": {
        "next": "2027-02-28",
        "days": 49,
        "turning": 25.5,
        "every": "February 28 (February 29 in leap years)"
      },
      "source": "hand calculation in content.mdx: August 31 + 6 months is February 31, which does not exist, so February 28, 2027; Python 3 datetime.date(2027, 2, 28) - datetime.date(2027, 1, 10) = 49 days"
    },
    {
      "given": {
        "birth": "2001-08-31",
        "on": "2028-01-10"
      },
      "expect": {
        "next": "2028-02-29",
        "turning": 26.5
      },
      "source": "hand calculation in content.mdx: 2028 is a leap year, so February 29, 2028"
    },
    {
      "given": {
        "birth": "2000-02-29",
        "on": "2026-03-01"
      },
      "expect": {
        "next": "2026-08-29",
        "every": "August 29",
        "countdown": "181 days to go"
      },
      "source": "hand calculation in content.mdx: February 29 + 6 months = August 29; Python 3 datetime.date(2026, 8, 29) - datetime.date(2026, 3, 1) = 181 days"
    },
    {
      "given": {
        "birth": "2010-03-31",
        "on": "2026-09-30"
      },
      "expect": {
        "next": "2026-09-30",
        "days": 0,
        "countdown": "today",
        "turning": 16.5,
        "every": "September 30"
      },
      "source": "hand calculation in content.mdx: March 31 + 6 months is September 31, so September 30"
    }
  ],
  "sources": [
    "The Python Standard Library, datetime: Basic date and time types (proleptic Gregorian calendar; date differences in days), used to check the worked examples, retrieved 2026-10-02. https://docs.python.org/3/library/datetime.html"
  ],
  "related": [
    "birthday",
    "dob",
    "date"
  ],
  "changelog": []
}
