PHPackages                             976-tuna/custom-calendar - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. 976-tuna/custom-calendar

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

976-tuna/custom-calendar
========================

Custom 13-month, 28-day calendar package

v2.0.7(2mo ago)0173MITPHPPHP ^8.3

Since Jan 31Pushed 2mo ago1 watchersCompare

[ Source](https://github.com/TerrenceBerg/moon)[ Packagist](https://packagist.org/packages/976-tuna/custom-calendar)[ RSS](/packages/976-tuna-custom-calendar/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (3)Versions (119)Used By (0)

TerSun Calendar
===============

[](#tersun-calendar)

A calendar for humans
=====================

[](#a-calendar-for-humans)

A standalone Laravel package for integrating a custom 13-month, 28-day calendar. This package overlays the normal Gregorian calendar, incorporates solunar and tide data, and includes moon phases. It uses NOAA data to enrich the calendar with real-world astronomical information.

Features
--------

[](#features)

- **13-month, 28-day calendar system**: Each month has 28 days, and the year consists of 13 months.
- **1 day of rest**: Each year has one day of rest, usually placed between months.
- **First day of the year is the Vernal Equinox**.
- **Solunar data**: The calendar includes solunar information, which is crucial for determining optimal fishing and hunting times.
- **Tide Data**: Tidal information is included to show high and low tides for each day.
- **Moon Phases**: The calendar shows moon phase information, including new moon, full moon, etc.
- **Normal Calendar Overlay**: Allows you to overlay the custom calendar on the regular Gregorian calendar for comparison.

Installation
------------

[](#installation)

### 1. Via Composer

[](#1-via-composer)

Run the following command to install the package via Composer:

```
composer require 976-tuna/custom-calendar
```

**Custom 13-Month Calendar (Laravel Package)**
==============================================

[](#custom-13-month-calendar-laravel-package)

A standalone Laravel package for integrating a **custom 13-month, 28-day calendar**. This package overlays the **Gregorian calendar**, incorporates **solunar and tide data**, and includes **moon phases**. It also uses **NOAA data** to enrich the calendar with real-world astronomical information.

---

**🌟 Features**
--------------

[](#-features)

- **✅ 13-month, 28-day calendar system** – Each month has **28 days**, and the year consists of **13 months**.
- **✅ 1 day of rest** – Each year has **one extra day of rest**, usually placed between months.
- **✅ First day of the year is the Vernal Equinox** – The calendar starts with the **March Equinox**.
- **✅ Solunar data** – Includes **best fishing and hunting times**.
- **✅ Tide data** – Shows **high and low tide levels &amp; times** (fetched from **NOAA API**).
- **✅ Moon Phases** – Displays **New Moon, Full Moon, First Quarter, etc.**
- **✅ NOAA integration** – Fetches **water temperature, wind speed, and sunrise/sunset times**.
- **✅ Normal Calendar Overlay** – Allows **overlaying with the Gregorian calendar**.

---

**📀 Installation**
------------------

[](#-installation)

### **1. Install via Composer**

[](#1-install-via-composer)

```
composer require 976-tuna/custom-calendar
```

### **2. Import Solar Events Data**

[](#2-import-solar-events-data)

```
php artisan migrate
php artisan calendar-data:import
```

This will **import solar events** (equinoxes and solstices) into the database.

### **3. Fetch &amp; Store NOAA Stations**

[](#3-fetch--store-noaa-stations)

```
php artisan noaa:fetch-stations
php artisan fetch:noaa-current-stations
php artisan match:noaa-currents
```

### **4. Fetch &amp; Store NOAA Data (Tides, Wind, Moon Phases)**

[](#4-fetch--store-noaa-data-tides-wind-moon-phases)

```
php artisan noaa:fetch {days=7}
```

This fetches **NOAA tide and weather data** for the **next 7 days** (or a custom number of days).

```
This retrieves **all NOAA stations** and their **available data products**.

---

## **📊 Viewing Stored Data & Statistics**

### **5. View Last Imported Solar Events**
```sh
php artisan tinker
>>> \App\Models\SolarEvent::latest()->first();

```

### **6. View Last Fetched NOAA Tide Data**

[](#6-view-last-fetched-noaa-tide-data)

```
php artisan tinker
>>> \App\Models\NOAATideForecast::latest()->first();
```

### **7. View NOAA Stations**

[](#7-view-noaa-stations)

```
php artisan tinker
>>> \App\Models\NOAAStation::all();
```

---

**📅 Usage in Blade Template**
-----------------------------

[](#-usage-in-blade-template)

You can load the calendar in a Blade view like this:

```
@php
    $calendarData = \Tuna976\CustomCalendar\CustomCalendar::generateCalendar();
@endphp

@include('custom-calendar::calendar', ['calendarData' => $calendarData])
```

---

**🚀 Next Steps**
----------------

[](#-next-steps)

- **Improve mobile responsiveness** for small screens.
- **Optimize NOAA data fetching** to reduce API requests.
- **Add dynamic user selection** for NOAA stations.

### **💬 Need Help?**

[](#-need-help)

For issues, feel free to create an **[Issue on GitHub](#)** or contact **976-Tuna**.

---

###  Health Score

47

—

FairBetter than 94% of packages

Maintenance84

Actively maintained with recent releases

Popularity12

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity70

Established project with proven stability

 Bus Factor1

Top contributor holds 88.1% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~3 days

Total

118

Last Release

84d ago

Major Versions

v1.9.9 → v2.0.02026-02-16

PHP version history (2 changes)v1.0.0PHP ^8.1

v1.8.9PHP ^8.3

### Community

Maintainers

![](https://www.gravatar.com/avatar/5129ffd21ad925024a868e7de5d0d47e029a28a0fd7695622fb5cd3ffe9f8a1f?d=identicon)[976TUNA](/maintainers/976TUNA)

---

Top Contributors

[![kianisanaullah](https://avatars.githubusercontent.com/u/28821509?v=4)](https://github.com/kianisanaullah "kianisanaullah (140 commits)")[![TerrenceBerg](https://avatars.githubusercontent.com/u/8772089?v=4)](https://github.com/TerrenceBerg "TerrenceBerg (19 commits)")

### Embed Badge

![Health badge](/badges/976-tuna-custom-calendar/health.svg)

```
[![Health](https://phpackages.com/badges/976-tuna-custom-calendar/health.svg)](https://phpackages.com/packages/976-tuna-custom-calendar)
```

###  Alternatives

[livewire/volt

An elegantly crafted functional API for Laravel Livewire.

4195.3M84](/packages/livewire-volt)[gehrisandro/tailwind-merge-laravel

TailwindMerge for Laravel merges multiple Tailwind CSS classes by automatically resolving conflicts between them

341682.2k18](/packages/gehrisandro-tailwind-merge-laravel)[backpack/basset

Dead-simple way to load CSS or JS assets only once per page, when using Laravel 10+.

202832.4k6](/packages/backpack-basset)[firefly-iii/data-importer

Firefly III Data Import Tool.

7545.8k](/packages/firefly-iii-data-importer)[blair2004/nexopos

The Free Modern Point Of Sale System build with Laravel, TailwindCSS and Vue.js.

1.2k2.3k](/packages/blair2004-nexopos)[ramonrietdijk/livewire-tables

Dynamic tables for models with Laravel Livewire

21147.4k](/packages/ramonrietdijk-livewire-tables)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
