> For the complete documentation index, see [llms.txt](https://ovatheme.gitbook.io/brw/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ovatheme.gitbook.io/brw/create-a-product/rental-type-config/by-period-of-time.md).

# By Period of Time

<figure><img src="/files/jriWnwAAZGwMH8WsBgbU" alt=""><figcaption></figcaption></figure>

The **Rental by Period Time** type sells rentals as fixed-duration packages. Instead of letting the customer freely pick a date range, you define a list of packages (e.g. "3-Day Pass", "Weekly Rental", "4-Hour Session") each with a fixed price. The customer selects a package and a start date — the end date is calculated automatically from the package duration.

{% hint style="info" icon="lightbulb-exclamation" %}
Use this type when your pricing is package-based rather than per-unit-time: weekly bike rentals, monthly equipment subscriptions, day-pass activities, or fixed-hour studio sessions.
{% endhint %}

| Aspect                 | Rental by Day                  | Rental by Period Time                 |
| ---------------------- | ------------------------------ | ------------------------------------- |
| Customer selects       | Free date range (any duration) | A pre-defined package + start date    |
| Pricing model          | Price × number of days         | Fixed price per package               |
| Drop-off date          | Customer picks                 | Auto-calculated from package duration |
| GD / ST                | ✓                              | — Not available                       |
| Daily pricing plan     | ✓                              | — Not available                       |
| Discount mechanism     | Global Discount by days        | Per-package Discount field            |
| Locations / Round-trip | ✓                              | ✓                                     |

## 1: Quick Start

{% stepper %}
{% step %}

### Add General fields

Read in [overview](/brw/create-a-product/overview.md)
{% endstep %}

{% step %}

### [Choose Rental Type](#id-2-choose-rental-type)

{% endstep %}

{% step %}

### [Pricing Settings](#id-3-pricing-settings)

{% endstep %}

{% step %}

### [Shared Fields](#id-4-shared-fields)

The following fields are shared across multiple rental types.
{% endstep %}

{% step %}

### [Common Fields](#id-5-common-fields)

The following fields are shared across all rental types.&#x20;
{% endstep %}

{% step %}

### [Customize Fields in Product Editing](#id-6-customize-fields-in-product-editing)

You can add/remove fields in product editing.
{% endstep %}

{% step %}

### Publish

Set a WooCommerce Regular Price for display purposes, then click **Publish**. The actual booking price is always calculated by BRW settings.
{% endstep %}
{% endstepper %}

## 2: Choose Rental Type

* Step 1: Add new product
* Step 2: Setup&#x20;
  * Product data: Rental
  * Rental Type: Period of Time

<figure><img src="/files/4lFnFSnVQP77Cj0buSNs" alt=""><figcaption></figcaption></figure>

## 3: Pricing Settings

### 3.1 Package Type <a class="button primary">unfixed\_time</a>

A global setting that controls whether the session start/end time is fixed or customer-selectable. Applies to all Hour-type packages in this product.

{% columns %}
{% column %}
**🔒 Fixed Hour     `no`**

* Package has a specific start and end time
* Customer cannot change the session time
* Example: "Morning Session 09:00–13:00"
* Fields: `pehour_start_time[]`, `pehour_end_time[]`
  {% endcolumn %}

{% column %}
**🕐 UnFixed Hour   `yes`**

* Package defines duration in hours
* Customer chooses their own start time
* Example: "4-Hour Session" (start anytime)
* Field: `pehour_unfixed[]` (total hours)
  {% endcolumn %}
  {% endcolumns %}

{% hint style="danger" %}
This setting only affects packages with **Type = Hour**. Day-type packages are unaffected — the customer always picks a start date and the end date is calculated by adding the package's day count.
{% endhint %}

### 3.2 Packages <a class="button primary">packages</a>

The main pricing table. Each row is one package option the customer can select. Add as many packages as needed — they are displayed as a dropdown or list in the booking form.

| Column    | Meta key            | Description                                                                                                                                               |
| --------- | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ID        | `petime_id[]`       | Unique identifier for this package. Use alphanumeric characters, no spaces (e.g. `weekly`, `halfday`, `pkg3d`). Used internally to reference the package. |
| Price     | `petime_price[]`    | Fixed price for this package. Shown in the booking form when the customer selects it.                                                                     |
| Type      | `package_type[]`    | Select **Hour** (`inday`) for same-day sessions, or **Day** (`other`) for multi-day packages.                                                             |
| Name      | `petime_label[]`    | Display name shown to customers (e.g. "Half Day", "Weekly Pass", "3-Day Rental"). Keep concise.                                                           |
| Discounts | `petime_discount[]` | <p>Optional discount value for this package. Reduces the package price by this amount </p><p>or percentage.</p>                                           |

**When Type = Hour** — additional fields appear:

| Field                 | Meta key              | Description                                                                                                                                       |
| --------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| Total hours (UnFixed) | `pehour_unfixed[]`    | Number of hours for this session package. Used when Package Type = **UnFixed Hour**. The customer picks the start time; end = start + this value. |
| Start time (Fixed)    | `pehour_start_time[]` | Fixed session start time. Used when Package Type = **Fixed Hour**.                                                                                |
| End time (Fixed)      | `pehour_end_time[]`   | Fixed session end time. Used when Package Type = **Fixed Hour**.                                                                                  |

**When Type = Day** — additional field appears:

| Field      | Meta key        | Description                                                                              |
| ---------- | --------------- | ---------------------------------------------------------------------------------------- |
| Total days | `petime_days[]` | Number of days for this package. The drop-off date = pick-up date + this number of days. |

{% hint style="info" %}
**Example package table:**\
ID=`halfday` | Price=$25 | Type=Hour | Name="Half Day" | Hours=4\
ID=`fullday` | Price=$40 | Type=Hour | Name="Full Day" | Hours=8\
ID=`weekly` | Price=$180 | Type=Day | Name="Weekly Pass" | Days=7
{% endhint %}

{% hint style="info" %}
**Drop-off date:** Period Time type does *not* show a separate drop-off date picker in the booking form. The end date/time is calculated automatically once the customer picks a package and a start date.
{% endhint %}

## 4: Shared Fields

Period Time type supports Locations, Round-trip, and Guests. There is **no separate Drop-off date** field — it is auto-calculated from the selected package.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Locations</strong></td><td><em>Pickup/dropoff pairs + price</em></td><td data-object-fit="contain"><a href="/files/QJ6Fl2X4Dx2g3uUmj2gI">/files/QJ6Fl2X4Dx2g3uUmj2gI</a></td><td><a href="/pages/fIJxNdnB3WMNAIzPhO03">/pages/fIJxNdnB3WMNAIzPhO03</a></td></tr><tr><td><strong>Location surcharge</strong></td><td><em>Extra fee per location</em></td><td data-object-fit="contain"><a href="/files/cdySSZykZ2ZjYt1j6qof">/files/cdySSZykZ2ZjYt1j6qof</a></td><td><a href="/pages/BymGnGJuRfRqJAZ5YZTM">/pages/BymGnGJuRfRqJAZ5YZTM</a></td></tr><tr><td><strong>Pick-up location</strong></td><td><em>Show/rename on booking form</em></td><td data-object-fit="contain"><a href="/files/VRQp1fDrjb1yHNfjnyAC">/files/VRQp1fDrjb1yHNfjnyAC</a></td><td><a href="/pages/ROpztnKp5QzYsxP5DWDK">/pages/ROpztnKp5QzYsxP5DWDK</a></td></tr><tr><td><strong>Drop-off location</strong></td><td><em>Show/rename on booking form</em></td><td data-object-fit="contain"><a href="/files/PhpU87D8QCJO1pbkBJft">/files/PhpU87D8QCJO1pbkBJft</a></td><td><a href="/pages/ltbC4MGgvMzSq92SUZto">/pages/ltbC4MGgvMzSq92SUZto</a></td></tr><tr><td><strong>Round-trip</strong></td><td><em>Toggle + extra fee</em></td><td data-object-fit="contain"><a href="/files/Cdx8hnVoPefS5C4MAJ2Q">/files/Cdx8hnVoPefS5C4MAJ2Q</a></td><td><a href="/pages/5we2hwAvj3QZ1sgzCGNu">/pages/5we2hwAvj3QZ1sgzCGNu</a></td></tr><tr><td><strong>Guests options</strong></td><td><em>show/hide guest</em></td><td data-object-fit="contain"><a href="/files/pUrvaxIOVMndrA110lNm">/files/pUrvaxIOVMndrA110lNm</a></td><td><a href="/pages/cfkdHXKLMvGjuCQYgb6X">/pages/cfkdHXKLMvGjuCQYgb6X</a></td></tr><tr><td><strong>Guests fields</strong></td><td><em>Form fields + min/max</em></td><td data-object-fit="contain"><a href="/files/LIgxm2xMIr5RpWbiiIza">/files/LIgxm2xMIr5RpWbiiIza</a></td><td><a href="/pages/0SZ4g1xj4G8OqWD7Pkl4">/pages/0SZ4g1xj4G8OqWD7Pkl4</a></td></tr><tr><td><strong>Pick-up date</strong></td><td><em>Time slots, label, defautls</em></td><td data-object-fit="contain"><a href="/files/EfKepudwm942CZujRdPN">/files/EfKepudwm942CZujRdPN</a></td><td><a href="/pages/R9BCAAY0ZePEoQ0S2Oyd">/pages/R9BCAAY0ZePEoQ0S2Oyd</a></td></tr><tr><td><strong>Booking Conditions</strong></td><td><em>Min/max days, preparation, advance</em></td><td data-object-fit="contain"><a href="/files/RP6bC5CznDEnDTAZplUU">/files/RP6bC5CznDEnDTAZplUU</a></td><td><a href="/pages/j3PSoiHi0c2ZmunW3JtQ">/pages/j3PSoiHi0c2ZmunW3JtQ</a></td></tr></tbody></table>

## 5: Common Fields

These fields are shared across all rental types and documented on a dedicated reference page. Click any card to go directly to that section.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><strong>Availability</strong></td><td><em>Allowed dates, disabled dates, iCal</em></td><td><a href="/pages/se2SdKU1oGq12QOILLtJ">/pages/se2SdKU1oGq12QOILLtJ</a></td><td><a href="/files/sJup7bwcHJog6g4DpS6r">/files/sJup7bwcHJog6g4DpS6r</a></td></tr><tr><td><strong>Services &#x26; Resources</strong></td><td><em>Add-on pricing with /Day or /Order</em></td><td><a href="/pages/wDir5HOVkeGp8zrl58u1">/pages/wDir5HOVkeGp8zrl58u1</a></td><td data-object-fit="contain"><a href="/files/foB7SCXWfrz6YIBMxKEN">/files/foB7SCXWfrz6YIBMxKEN</a></td></tr><tr><td><strong>Deposit</strong></td><td><em>Fixed or percentage upfront payment</em></td><td><a href="/pages/unYXdPY2dLE1s9Ft0ZfC">/pages/unYXdPY2dLE1s9Ft0ZfC</a></td><td data-object-fit="contain"><a href="/files/M3Dd2NBocdXTDiMua10L">/files/M3Dd2NBocdXTDiMua10L</a></td></tr><tr><td><strong>Insurance</strong></td><td><em>Fixed fee added to every booking</em></td><td><a href="/pages/LxEaPJ5y15dPC7sHj2YB">/pages/LxEaPJ5y15dPC7sHj2YB</a></td><td data-object-fit="contain"><a href="/files/3SoE1Zpurcy3jQB8XDL0">/files/3SoE1Zpurcy3jQB8XDL0</a></td></tr><tr><td><strong>Inventory &#x26; Quantity</strong></td><td><em>Stock count, named vehicles</em></td><td><a href="/pages/RISVNcmzpxhDDvDCRwuJ">/pages/RISVNcmzpxhDDvDCRwuJ</a></td><td data-object-fit="contain"><a href="/files/SibMoPJmOEVt0RnSNZdP">/files/SibMoPJmOEVt0RnSNZdP</a></td></tr><tr><td><strong>Booking Form</strong></td><td><em>Custom checkout fields</em></td><td><a href="/pages/JVKPwpDA7CcnfWhAmlSV">/pages/JVKPwpDA7CcnfWhAmlSV</a></td><td data-object-fit="contain"><a href="/files/RIYx8VUjC3GavvqtQWo0">/files/RIYx8VUjC3GavvqtQWo0</a></td></tr><tr><td><strong>Map / Place</strong></td><td><em>Maps pin on product page</em></td><td><a href="/pages/V9Fs957iBL1hyL5oKwnD">/pages/V9Fs957iBL1hyL5oKwnD</a></td><td data-object-fit="contain"><a href="/files/TrfIY2OrNMClVGIwauDK">/files/TrfIY2OrNMClVGIwauDK</a></td></tr><tr><td><strong>Display &#x26; Layout</strong></td><td><em>Price format, template, extra tab</em></td><td><a href="/pages/kCaBW7VaB4tTWpA56rBc">/pages/kCaBW7VaB4tTWpA56rBc</a></td><td data-object-fit="contain"><a href="/files/0r8vbxkjli9ZBQqmj1xV">/files/0r8vbxkjli9ZBQqmj1xV</a></td></tr><tr><td><strong>Product Content</strong></td><td><em>Specifications, features list</em></td><td><a href="/pages/jlHZjKdIAPVSXDvqNIPw">/pages/jlHZjKdIAPVSXDvqNIPw</a></td><td data-object-fit="contain"><a href="/files/P4Z9VNYwCaf9JiUfuyyS">/files/P4Z9VNYwCaf9JiUfuyyS</a></td></tr></tbody></table>

## 6: Customize Fields in Product Editing

When you create a product and want to remove unnecessary fields, you can follow these steps in [Customize - Rental Type](/brw/customize-rental-type.md)
