Project

General

Profile

Actions

Feature #21972

open

Add Date.birthday and Date.age to track Ruby's milestones

Feature #21972: Add Date.birthday and Date.age to track Ruby's milestones
2

Added by jinroq (Jinroq SAITOH) 1 day ago. Updated about 23 hours ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:125156]

Description

Since its inception in 1993, Ruby has grown beyond a mere programming language to become a rich culture beloved by developers worldwide. However, the standard date library surprisingly lacks a formal interface to commemorate Ruby's own historical milestones.

The fact that developers cannot programmatically reference Ruby’s heritage is a missed opportunity to foster affection and respect for the language's identity. To rectify this historical oversight, I propose adding the following methods to reference Ruby's key anniversaries and calculate the elapsed years.

New Features

  • Date.birthday(version = nil)
    Returns the "birthday" of significant moments in Ruby's history.

    • nil (default): 1993-02-24 (The day the name "Ruby" was decided).
    • 0.95: 1995-12-21 (The first public release date).
    • 1.0: 1996-12-25 (The first stable release date).
  • Date.age(version = nil)
    Calculates the current age (in full years) based on today's date and the specified milestone.

    • Date.age: Years since the name "Ruby" was born.
    • Date.age(0.95): Years since Ruby was first introduced to the public as OSS.
    • Date.age(1.0): Years since Ruby began its journey as a stable language.

Usage Example

# Check the "age" of each edition
puts "Name age: #{Date.age}"       # => 33 (as of 2026)
puts "OSS age:  #{Date.age(0.95)}" # => 30
puts "Stable:   #{Date.age(1.0)}"  # => 29

# Perform a special action on a specific anniversary
if Date.today == Date.birthday(1.0)
  celebrate_stable_anniversary!
end

Implementation and Testing

The attached patch (birthday_and_age.patch) includes the implementation of these methods along with a rigorous test suite (test/date/test_date_birthday.rb).
The tests cover argument dispatching, ArgumentError for invalid inputs, and edge cases for age calculation (e.g., boundaries before and after the actual birthday), ensuring production-level quality.

Equipping Ruby with the intelligence to reflect upon its own origins is a vital step toward the next 30 or 40 years of its evolution.

(Note: This proposal was submitted on a special day that encourages looking at our history with both deep respect and a touch of creative imagination, as is traditional for such a significant date in the calendar.)


Files

birthday_and_age.patch (8.08 KB) birthday_and_age.patch jinroq (Jinroq SAITOH), 03/31/2026 02:38 PM
Actions

Also available in: PDF Atom