2017 © Pedro Peláez
 

library datetime

Datetime value objects.

image

krixon/datetime

Datetime value objects.

  • Wednesday, July 19, 2017
  • by krixon
  • Repository
  • 1 Watchers
  • 1 Stars
  • 1,331 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 7 Versions
  • 14 % Grown

The README.md

datetime

Build Status Coverage Status, (*1)

SensioLabsInsight, (*2)

PHP7 date/time library., (*3)

Prerequisites

  • PHP 7.0+

Installation

Install via composer

To install datetime with Composer, run the following command:, (*4)

$ composer require krixon/datetime

You can see this library on Packagist., (*5)

Install from source

# HTTP
$ git clone https://github.com/krixon/datetime.git
# SSH
$ git clone git@github.com:krixon/datetime.git

Introduction

This library is a layer on top of PHP's built-in date and time classes which provides additional functionality and improvements such as microsecond precision and immutability (without the inconsistencies between \DateTime, \DateTimeImmutable and DateTimeInterface)., (*6)

Creating Dates

There are various ways to create a new DateTime instance., (*7)

Using the current time and default timezone:, (*8)

// These objects all represent the current time.
$date = DateTime::now();
$date = DateTime::create();
$date = new DateTime();

Using a UNIX timestamp:, (*9)

// Standard (second) precision.
DateTime::fromTimestamp(1499789008)->format('Y-m-d H:i:s.u');
// 2017-07-11 16:03:28.000000

// Millisecond precision.
DateTime::fromTimestampWithMilliseconds(1499789008123)->format('Y-m-d H:i:s.u');
// 2017-07-11 16:03:28.123000

// Microsecond precision.
DateTime::fromTimestampWithMicroseconds(1499789008123456)->format('Y-m-d H:i:s.u');
// 2017-07-11 16:03:28.123456

Parsing a string using a specified format:, (*10)

$date = DateTime::fromFormat('Y-m-d H:i:s.u', '2017-07-11 16:03:28.123456');

Parsing a string containing any supported date and time format:, (*11)

$date = DateTime::create('yesterday');
$date = DateTime::create('1 month ago');
$date = DateTime::create('first day of January 2008');
$date = DateTime::create('+5 weeks');
$date = DateTime::create('Monday next week');
// etc

Using an existing built-in \DateTime instance:, (*12)

$date = DateTime::fromInternalDateTime(new \DateTime());

Using an existing \IntlCalendar instance:, (*13)

$calendar = \IntlCalendar::createInstance();
$calendar->setTime(1499789008123);
$date = DateTime::fromIntlCalendar($calendar);

Modifying Dates

All DateTime instances are immutable. However methods are provided for creating new instances with modifications applied., (*14)

Adjusting the date:, (*15)

$date = DateTime::create('21st March 2017 09:45:00');

$date->withDateAt(2016, 09, 15); // 2016-09-15 09:45:00

// Any components not specified will not be changed.
$date->withDateAt(null, null, 15); // 2017-01-15 09:45:00

// There are also methods for setting the components individually.
$date->withYear(1981);           // 1981-03-21 09:45:00
$date->withMonth(DateTime::JAN); // 2017-01-21 09:45:00
$date->withDay(15);              // 2017-03-15 09:45:00

// Convenience methods for common date adjustments.
$date->withDateAtStartOfYear();                       // 2017-01-01 00:00:00
$date->withDateAtStartOfMonth();                      // 2017-03-01 00:00:00
$date->withDateAtEndOfMonth();                        // 2017-03-31 00:00:00
$date->withDateAtDayOfWeekInMonth(DateTime::TUE, 4);  // 2017-03-28 00:00:00 (4th Tuesday in March 2017)
$date->withDateAtDayOfWeekInMonth(DateTime::MON, -2); // 2017-03-20 00:00:00 (Penultimate Tuesday in March 2017)
$date->withDateAtStartOfWeek('en_GB');                // 2017-03-20 00:00:00 (Monday, start of the week of 21st Match 2017 in Great Britain).
$date->withDateAtStartOfWeek('en_US');                // 2017-03-19 00:00:00 (Sunday, start of the week of 21st Match 2017 in USA).

If you are making many changes to a DateTime without needing the intermediate objects, you can use the DateTimeCalculator class. This supports all of the operations you can do on a DateTime object itself but without the overhead of creating new objects which are then thrown away., (*16)

For example, imagine you want to add an interval to a base date a number of times, but you are only interested in the final result. While you could call $date = $date->add('PT1D') repeatedly, a more efficient method would be:, (*17)

$calculator = DateTime::create('2017-01-01')->calculator();

for ($i = 0; $i < 50; $i++) {
    $calculator->addInterval('PT1D');
}

$date = $calculator->result(); // 2017-02-19

Of course this is a contrived example and in reality you would just call $date = $date->add('PT50D'), but there are many arithmetic operations you can perform with the calculator which cannot necessarily be achieved as efficiently using just the DateTime API., (*18)

The Versions

19/07 2017

dev-master

9999999-dev

Datetime value objects.

  Sources   Download

MIT

The Requires

  • php-64bit >=7

 

The Development Requires

05/06 2017

0.1.4

0.1.4.0

Datetime value objects.

  Sources   Download

MIT

The Requires

  • php-64bit >=7

 

The Development Requires

05/06 2017

0.1.3

0.1.3.0

Datetime value objects.

  Sources   Download

MIT

The Requires

  • php-64bit >=7

 

The Development Requires

04/04 2017

0.1.2

0.1.2.0

Datetime value objects.

  Sources   Download

MIT

The Requires

  • php-64bit >=7

 

The Development Requires

04/04 2017

0.1.1

0.1.1.0

Datetime value objects.

  Sources   Download

MIT

The Requires

  • php-64bit >=7

 

The Development Requires

30/03 2017

v0.1.0

0.1.0.0

Datetime value objects.

  Sources   Download

MIT

The Requires

  • php-64bit >=7

 

The Development Requires

30/03 2017

0.1.0

0.1.0.0

Datetime value objects.

  Sources   Download

MIT

The Requires

  • php-64bit >=7

 

The Development Requires