Coder Social home page Coder Social logo

obokaman-com / dateranger Goto Github PK

View Code? Open in Web Editor NEW
0.0 3.0 0.0 37 KB

A PHP 7.2+ date ranges management library with predefined ranges like Year, Month, Week, Day.

Home Page: http://obokaman-com.github.io/DateRanger

License: MIT License

PHP 100.00%

dateranger's Introduction

DateRanger

Build Status Code Coverage Scrutinizer Code Quality

DateRanger library offer an easy way to create date ranges, allowing to create your own special ranges extending DateRange or reuse the basic ones included in the library itself (Year, Month, Week or Day). This library was inspired by others like Calendr by Yohan Giarelli or Period by The PHP League

Installation

DateRanger is available on packagist, so you can easily install with Composer.

Just run the following command:

$ composer require obokaman/dateranger

or include the library in your project's composer.json:

    "require": {
        "php": ">=7.2",
        [...]
        "obokaman/dateranger": "^0.1",
        [...]
    },

Example

<?php

include('vendor/autoload.php');

use DateRanger\Period\Year;

$year = new Year();

echo "<h1>{$year->start()->format('Y')}</h1>";
foreach ($year as $month) {
    echo "<table><caption>{$month->start()->format('F')}</caption>";
    echo "<thead><tr><th></th><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th><th>Sun</th></tr></thead><tbody>";
    foreach ($month as $week) {
        echo "<tr><td><small>{$week->start()->format('W')}</small></td>";
        foreach ($week as $day) {
            if (!$day->overlaps($month)) $day_color = '#ddd;';
            elseif ($day->isHoliday()) $day_color = 'red;';
            else $day_color = '#333';

            echo "<td style='border:1px solid #ccc;color:{$day_color}'>";
            echo $day->start()->format('d') . '</td>';
        }
        echo '</tr>';
    }
    echo '</tbody></table>';
}

Basic usage

Library provides several date range objects that extends from DateRange. All these objects share some functionality:

  • start() return a DateTimeImmutable object with the start date for the period.
  • end() return a DateTimeImmutable object with the end date for the period.
  • getPeriod(string $interval) returns a DatePeriod object based on the current DateRange, following the given interval in string format (same values accepted by DateInterval constructor).
  • overlaps(DateRange $period) returns a boolean indicating if period overlaps with other DateRange passed as argument.
  • isCurrent() returns a boolean indicating if period is the current one: current year, month, week or day, depending on the class being used.
  • equals(DateRange $period) compares start and end dates between current period and the one passed as argument.

As told above, all date range objects extend from DateRange, wich implements Iterator and Countable, so it's possible to iterate through their "children periods" directly using foreach or know how many of them are contained by using count.

For instance:

$year = Year::fromYear(2014);
echo count($year); // returns 12.
$month = new Month('2014-01-01');
echo count($month) . PHP_EOL; // returns 5 (weeks).

echo $month->start()->format('F') . PHP_EOL; // returns 'January'.
foreach ($month as $week) {
    foreach ($week as $day) {
        if ($month->isOutOfMonth($day)) continue;
        echo $day->start()->format('Y-m-d') . PHP_EOL; // returns 2014-01-01\n [...]
    }
}

Contribute

Comments, feedback and PR are more than welcome!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.