A simple PHP function to generate estimated delivery date ranges for e-commerce applications, with support for business days calculation.
generateDeliveryInterval($minDays = 1, $maxDays = 14, $skipWeekends = true)Generates a formatted delivery estimate string starting from tomorrow and ending after a specified number of days.
| Parameter | Type | Default | Description |
|---|---|---|---|
$minDays |
int | 1 | Minimum delivery days (currently fixed to start from tomorrow) |
$maxDays |
int | 14 | Maximum delivery days from today |
$skipWeekends |
bool | true | Whether to count only business days (Mon-Fri) |
// Default: 14 business days delivery window
echo generateDeliveryInterval();
// Output: "Est. delivery Tue, 27 - Thu, Sep 12"// Express delivery (5 business days)
echo generateDeliveryInterval(1, 5, true);
// Output: "Est. delivery Tue, 27 - Mon, Sep 2"
// Standard delivery (10 business days)
echo generateDeliveryInterval(1, 10, true);
// Output: "Est. delivery Tue, 27 - Fri, Sep 6"
// Economy delivery (21 calendar days, including weekends)
echo generateDeliveryInterval(1, 21, false);
// Output: "Est. delivery Tue, 27 - Tue, Sep 16"<div class="delivery-info">
<i class="fas fa-clock"></i> <?= generateDeliveryInterval() ?>
</div>The function returns a string in the format:
- Start date:
Day, Number(e.g., "Tue, 27") - End date:
Day, Month Number(e.g., "Thu, Sep 12") - Full format:
"Est. delivery [start] - [end]"
- Start Date: Always begins from tomorrow (
today + 1 day) - End Date Calculation:
- If
$skipWeekends = true: Counts only Monday-Friday as valid delivery days - If
$skipWeekends = false: Counts all calendar days including weekends
- If
- Date Formatting: Uses abbreviated day names and month names for compact display
When $skipWeekends = true, the function:
- Skips Saturdays (day 6) and Sundays (day 7)
- Only counts Monday (1) through Friday (5) as working days
- Uses PHP's
DateTime::format('N')where Monday = 1, Sunday = 7
Assuming today is Monday, August 26, 2025:
| Configuration | Output | Description |
|---|---|---|
generateDeliveryInterval() |
Est. delivery Tue, 27 - Thu, Sep 12 |
14 business days |
generateDeliveryInterval(1, 7, true) |
Est. delivery Tue, 27 - Wed, Sep 3 |
1 week business days |
generateDeliveryInterval(1, 3, false) |
Est. delivery Tue, 27 - Thu, 29 |
3 calendar days |
generateDeliveryInterval(1, 30, true) |
Est. delivery Tue, 27 - Mon, Oct 6 |
30 business days |
- PHP 5.2+: Requires
DateTimeclass - No external libraries: Uses only native PHP functions
// Change defaults for your business
function generateDeliveryInterval($minDays = 2, $maxDays = 10, $skipWeekends = false) {
// ... function code
}Modify the format strings in the function:
// Current format
$minFormatted = $minDate->format('D, j'); // "Tue, 27"
$maxFormatted = $maxDate->format('D, M j'); // "Thu, Sep 12"
// Alternative formats
$minFormatted = $minDate->format('l, F j'); // "Tuesday, August 27"
$maxFormatted = $maxDate->format('M j, Y'); // "Sep 12, 2025"- E-commerce product pages: Show delivery estimates on item detail pages
- Shopping carts: Display expected delivery for cart items
- Order confirmation: Provide delivery windows after purchase
- Shipping calculators: Dynamic delivery estimation tools
- Multi-tier shipping: Different delivery speeds (express, standard, economy)