heartsentwined / date-time-parser

根据Vcard [ISO 6350] 中使用的ISO 8601日期/时间格式子集解析日期和时间。

v2.1.1 2016-07-06 12:20 UTC

This package is not auto-updated.

Last update: 2024-09-14 12:03:45 UTC


README

Build Status

根据Vcard [ISO 6350] 中使用的ISO 8601日期/时间格式子集解析日期和时间。

安装

Composer:

{
  "require": {
    "yalesov/date-time-parser": "2.*"
  }
}

用法

解析ISO-8601日期/时间

use Yalesov\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;

完整函数签名

public static function parseDateTime($datetime)

它接受一个ISO-8601日期/时间字符串并返回一个日期时间单位的数组。如果输入不是有效的日期/时间表达式,或者指定的日期/时间无效,则将抛出InvalidArgumentException

缺失的日期/时间单位将被填充为null

独立的时间表达式必须以前缀T开头。

要解析ISO-8601日期表达式,使用

public static function parseDate($date)

要解析ISO-8601时间表达式,使用

public static function parseTime($time)

这两个函数的返回数组与Parser::parseDateTime()相同。

创建ISO-8601日期/时间

use Yalesov\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';

这些函数只是parse-()函数的反向。

完整函数签名

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)

有效范围

  • 年份:(无限)
  • 月份:01-12
  • 日期:01-31
  • 小时:00-23
  • 分钟:00-59
  • 秒:00-59

请注意,前缀为0的数字与前缀为0的字符串不同。例如,如果你想表示八月,请写8'08',而不是08

从完整或部分日期/时间创建时间戳

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

接受的参数与create-()系列相同。

Parser::createTimestamp()将在至少提供yearmonthday(并且有效)时创建时间戳。如果没有提供,则假定hourminutesecond'00';如果没有提供timezone,则使用脚本时区。

如果失败则返回null