Calendar Classes
The Calendar namespace provides date and time utilities with focus on days of the week and month operations, offering type-safe alternatives to numeric date handling.
DayOfWeek Enum
The DayOfWeek enum provides a type-safe representation of days of the week with conversion utilities.
Purpose
Eliminates magic numbers in date calculations and provides consistent day-of-week handling with flexible integer conversion options.
Available Days
SundaythroughSaturday- Complete week coverage with string-backed enum values
Key Methods
Integer Conversion
toInt(bool $zero = true)- Converts day to integer representation- When 
$zero = true(default): Sunday = 0, Monday = 1, ... Saturday = 6 - When 
$zero = false: Sunday = 1, Monday = 2, ... Saturday = 7 
Usage Scenarios
- Calendar application development
 - Date calculation and manipulation
 - Scheduling system implementation
 - Business hour calculations
 - Weekly recurring event handling
 - Date validation and formatting
 
Conversion Flexibility
The dual conversion system accommodates different standards:
Zero-Based (Default)
- Compatible with PHP's 
date('w')function - Common in programming contexts
 - JavaScript Date.getDay() compatible
 
One-Based
- Compatible with ISO 8601 standard (where Monday = 1)
 - Database systems that use 1-7 for days
 - Some international date standards
 
Integration Benefits
- Type-safe day comparisons
 - IDE autocompletion for days
 - Prevention of invalid day values
 - Clear code intention
 
Month Enum
The Month enum provides comprehensive month handling with navigation capabilities and integer conversion.
Purpose
Type-safe month operations with built-in navigation methods, eliminating the complexity of month calculations and wraparound handling.
Available Months
JanuarythroughDecember- Complete year coverage with string-backed enum values
Key Methods
Integer Conversion
toInt()- Returns the month number (1-12) following standard calendar numbering
Month Navigation
next()- Returns the next month with automatic year wraparound (December → January)previous()- Returns the previous month with automatic year wraparound (January → December)
Usage Scenarios
- Calendar navigation interfaces
 - Date range calculations
 - Monthly report generation
 - Billing cycle management
 - Seasonal calculation systems
 - Financial period handling
 
Navigation Features
Automatic Wraparound
The navigation methods handle year boundaries automatically:
December.next()returnsJanuaryJanuary.previous()returnsDecember- No need for manual boundary checking
 - Consistent behavior across all months
 
Chain Operations
Navigation methods can be chained for complex calculations:
- Multiple month advancement/retreat
 - Seasonal calculations
 - Quarter navigation
 - Period-based operations
 
Calendar Integration
The month enum integrates seamlessly with:
- PHP's built-in date functions
 - Calendar libraries
 - Date calculation utilities
 - Database date operations
 
Type Safety Benefits
- Eliminates magic numbers (1-12)
 - Prevents invalid month values
 - Clear method intentions
 - Compile-time validation
 
Common Patterns
Enum-Based Date Handling
Both calendar enums follow consistent patterns:
String-Backed Design
- Human-readable enum values
 - Easy debugging and logging
 - Clear code intention
 - Database storage friendly
 
Integer Conversion
- Consistent 
toInt()methods - Standard calendar numbering
 - Database compatibility
 - Calculation support
 
Navigation Consistency
Calendar enums provide consistent navigation patterns:
- Automatic boundary handling
 - Predictable wraparound behavior
 - Method chaining support
 - No special case handling required
 
Integration Strategy
PHP Date Functions
Calendar enums work seamlessly with PHP's date functions:
- Compatible with 
mktime()parameters - Works with 
DateTimeobjects - Integrates with 
date()formatting - Supports 
strtotime()operations 
Database Integration
- Integer conversion for database storage
 - String values for human-readable storage
 - Compatible with date column types
 - Supports date range queries
 
Performance Considerations
Memory Efficiency
- Enum instances are singleton-like
 - Minimal memory overhead
 - Efficient comparison operations
 - Fast navigation methods
 
Calculation Speed
- Simple arithmetic operations
 - No complex date library dependencies
 - Efficient modular arithmetic for wraparound
 - Optimized for frequent operations
 
Usage Best Practices
Type Safety
- Use enum values instead of integers where possible
 - Leverage IDE autocompletion
 - Validate enum inputs at boundaries
 - Use type hints in method signatures
 
Navigation
- Prefer enum navigation methods over manual calculation
 - Use method chaining for complex navigation
 - Let the enum handle boundary conditions
 - Trust automatic wraparound behavior
 
Integration
- Convert to integers only when interfacing with external systems
 - Use string values for logging and debugging
 - Leverage enum equality for comparisons
 - Combine with other date utilities as needed