Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Parse date and time according to the subset of ISO 8601 date/time format used in Vcard [ISO 6350].
PHP
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
src/Heartsentwined/DateTimeParser
test
.gitignore dev version
.travis.yml
README.md
composer.json

README.md

Heartsentwined\DateTimeParser

Build Status

Parse date and time according to the subset of ISO 8601 date/time format used in Vcard [ISO 6350].

Installation

Composer:

{
    "require": {
        "heartsentwined/date-time-parser": "1.*"
    }
}

Usage

Parse an ISO-8601 date/time

use Heartsentwined\DateTimeParser\Parser;

$datetime = Parser::parseDateTime('19961022T140000+0800');
// $datetime['year']        = '1996';
// $datetime['month']       = '10';
// $datetime['day']         = '22';
// $datetime['hour']        = '14';
// $datetime['minute']      = '00';
// $datetime['second']      = '00';
// $datetime['timezone']    = '+0800';

$datetime = Parser::parseDateTime('---22T14');
// $datetime['year']        = null;
// $datetime['month']       = null;
// $datetime['day']         = '22';
// $datetime['hour']        = '14';
// $datetime['minute']      = null;
// $datetime['second']      = null;
// $datetime['timezone']    = null;

Full function signature:

public static function parseDateTime($datetime)

It accepts an ISO-8601 date-and-or-time string and returns an array of datetime units. It will throw an InvalidArgumentException if the input is not a valid date/time expression, or if the date/time specified is invalid.

Missing date/time units will be filled with null.

Standalone time expressions must be prefixed with T.

To parse an ISO-8601 date expression, use:

public static function parseDate($date)

To parse an ISO-8601 time expression, use:

public static function parseTime($time)

The return array for these two functions are same as Parser::parseDateTime().

Create an ISO-8601 date/time

use Heartsentwined\DateTimeParser\Parser;

$expr = Parser::createDateTime('1996', '10', '22', '14', '00', '00', '+0800');
// $expr = '19961022T140000+0800';

$expr = Parser::createDateTime(null, null, '22', '14', null, null, null);
// $expr = '---22T14';

These are simply reverses of the parse-() functions.

Full function signatures:

public static function createDateTime(
    $year = null, $month = null, $day = null,
    $hour = null, $minute = null, $second = null, $timezone = null)
public static function createDate($year = null, $month = null, $day = null)
public static function createTime($hour = null, $minute = null, $second = null, $timezone = null)

Valid ranges:

  • Year: (unlimited)
  • Month: 01-12
  • Day: 01-31
  • Hour: 00-23
  • Minute: 00-59
  • Second: 00-59

Note that 0-prefixed numbers are different from 0-prefixed strings. For example, if you mean August, write 8 or '08', not 08.

Create a timestamp from a complete or partial date/time

public static function createTimestamp(
    $year = null, $month = null, $day = null,
    $hour = null, $minute = null, $second = null, $timezone = null)

Accepted arguments are same as the create-() series.

Parser::createTimestamp() will create a timestamp if at least year, month, day are given (and valid). It will assume '00' for hour, minute and second if not given; and script timezone if timezone is not given.

Return null if failed to create a timestamp.

Something went wrong with that request. Please try again.