lawondyss/moment-php

MomentPHP 是一个用于解析、操作和格式化日期的库。

v1.1 2014-06-17 18:42 UTC

This package is auto-updated.

Last update: 2024-09-17 22:19:32 UTC


README

MomentPHP 是一个用于解析、操作和格式化日期的库。它受到了 JavaScript 库 Moment.js 的启发。

许可证

GPL-3 许可证条款下免费分发。

安装

MomentPHP 可在 包管理器 上找到,您可以通过 Composer 获取它。

文件 composer.json

{
    "require": {
        "lawondyss/moment-php": "dev-master"
    }
}

在命令行运行

php composer.phar install

解析

现在

获取当前日期和时间

$moment = new MomentPHP\MomentPHP();

字符串

从日期时间字符串创建。字符串格式与 strtotime 函数相同(https://php.ac.cn/manual/en/function.strtotime.php)。

$string = '1980-12-07';
$string = '7 December 1980';
$string = '+1 week 2 days 4 hours 2 seconds';
$string = 'next Thursday';

$moment = new MomentPHP\MomentPHP($string);

整数

从时间戳整数创建。整数是自 Unix 纪元以来的秒数。

$integer = 345061302;
$integer = time();

$moment = new MomentPHP\MomentPHP($integer);

DateTime

从 DateTime 类的实例创建(https://php.ac.cn/manual/en/class.datetime.php

$moment = new MomentPHP\MomentPHP(new DateTime());

字符串 + 格式

如果字符串不可识别或令人困惑,您可以添加其格式。格式与 DateTime::createFromFormat 方法相同(https://php.ac.cn/manual/en/datetime.createfromformat.php)。

$string = '1980-07-12';
$format = 'Y-d-m';

$moment = new MomentPHP\MomentPHP($string, $format);

格式可能包含多个可选格式。然后使用第一个可接受的格式。

$string = '1980-12-07';
$format = array('U', 'Y-m-d');

$moment = new MomentPHP\MomentPHP($string, $format);

设置时区

时区通过构造函数的第三个参数设置。时区可以是支持时区表中的一项字符串,或者 DateTimeZone 类的实例(https://php.ac.cn/manual/en/class.datetimezone.php)。

$timezone = 'Europe/Prague';
$timezone = new DateTimeZone('Europe/Prague');

$moment = new MomentPHP\MomentPHP(null, null, $timezone);

显示

例如

$moment = new MomentPHP\MomentPHP('1980-12-07 19:21:42', null, 'Europe/Prague');

格式化()

返回格式化后的日期时间。参数与 date 函数相同(https://php.ac.cn/manual/en/function.date.php)。

var_dump( $moment->format('d/m/Y') ); // string(10) "07/12/1980"

时间戳()

返回自 Unix 纪元以来的秒数。

var_dump( $moment->timestamp() ); // int(345061302)

日期时间部分

var_dump( $moment->seconds() ); // string(2) "42"
// it`s same as
var_dump( $moment->second() );

var_dump( $moment->minutes() ); // string(2) "21"
// it's same as
var_dump( $moment->minute() );

var_dump( $moment->hours() ); // string(2) "19"
// it's same as
var_dump( $moment->hour() );

var_dump( $moment->days() ); // string(2) "07"
// it's same as
var_dump( $moment->day() );

var_dump( $moment->months() ); // string(2) "12"
// it's same as
var_dump( $moment->month() );

var_dump( $moment->years ); // string(4) "1980"
// ti's same as
var_dump( $moment->year() );

var_dump( $moment->weeks() ); //string(2) "49"
// it's same as
var_dump( $moment->week() );

// 1 (for Monday) through 7 (for Sunday)
var_dump( $moment->dayOfWeek() ); // string(1) "7"

// starting from 1
var_dump( $moment->dayOfYear() ); // string(3) "342"

var_dump( $moment->nameOfDayShort() ); // string(3) "Sun"

var_dump( $moment->nameOfDayLong() ); // string(6) "Sunday"

var_dump( $moment->dayWithSuffix() ); // string(3) "7th"

var_dump( $moment->daysInMonth() ); // string(2) "31"

var_dump( $moment->nameOfMonthShort() ); // string(3) "Dec"

var_dump( $moment->nameOfMonthLong() ); // string(8) "December"

var_dump( $moment->hourWithSuffix() ); // string(3) "7PM"

var_dump( $moment->isoDate() ); // string(25) "1980-12-07T19:21:42+01:00"

var_dump( $moment->nameOfTimezone() ); // string(13) "Europe/Prague"

var_dump( $moment->timezoneOffset() ); // int(3600)

diff()

获取秒数差。

$momentB = new MomentPHP('2000-01-01 00:00:00', 'Y-m-d H:i:s', 'Europe/Prague');
var_dump( $momentB->diff($moment) ); // int(601619898)

要获取其他测量单位的差值,将测量单位作为第二个参数传递。可接受的单位:sec,second,seconds,min,minute,minutes,hour,hours,day,days,month,months,year,years

var_dump( $momentB->diff($moment, 'months') ); // int(227)

默认返回向下取整的数值。如果需要浮点数,请将 TRUE 作为第三个参数传递。

var_dump( $momentB->diff($moment, 'months', true) ); // double(227.81)

from()

显示时间的常用方法。有时也称为时间差或相对时间。

$momentA = new MomentPHP('1980-12-07');
$momentB = new MomentPHP('1980-12-08');

var_dump( $momentA->from($momentB) ); // string(8) "in a day"
var_dump( $momentB->from($momentA) ); // string(9) "a day ago"

如果可以获取不带后缀的值,则将第二个参数设置为 TRUE

$momentA = new MomentPHP('1980-12-07');
$momentB = new MomentPHP('1980-12-08');

var_dump( $momentA->from($momentB, true) ); // string(5) "a day"
var_dump( $momentB->from($momentA, true) ); // string(5) "a day"

fromNow()

from 相同,但起始时间是现在。

$moment = new MomentPHP;
$moment->add(1, 'day');

var_dump( $moment->fromNow() ); // string(8) "in a day"

操作

add()

添加天数、月份、年份、小时、分钟和秒的数量。单位与 diff 方法相同。

$number = 1;
$unit = 'day';
var_dump( $moment->add($number, $unit)->days() ); // string(2) "08"

添加 DateInterval 类的实例。

$interval = DateInterval('1 day');
var_dump( $moment->add($interval)->days() ); // string(2) "08"

添加包含循环添加参数的数组。[unit => number]

$fields = array('days' => 1, 'years' => 1);
var_dump( $moment->add($fields)->format('d|Y') ); // string(7) "08|1981"

sub()

与 add() 相同,但用于减法。

$number = 1;
$unit = 'day';
var_dump( $moment->sub($number, $unit)->days() ); // string(2) "06"

startOf()

通过将其设置为时间单位的开头来改变原始的moment。

var_dump( $moment->isoDate() ); // string(25) "1980-12-07T19:21:42+01:00"

var_dump( $moment->startOf('minutes')->isoDate() ); // string(25) "1980-12-07T19:21:00+01:00"
var_dump( $moment->startOf('hours')->isoDate() ); // string(25) "1980-12-07T19:00:00+01:00"
var_dump( $moment->startOf('days')->isoDate() ); // string(25) "1980-12-07T00:00:00+01:00"
var_dump( $moment->startOf('months')->isoDate() ); // string(25) "1980-12-01T00:00:00+01:00"
var_dump( $moment->startOf('years')->isoDate() ); // string(25) "1980-01-01T00:00:00+01:00"

endOf()

通过将其设置为时间单位的开头来改变原始的moment。

var_dump( $moment->isoDate() ); // string(25) "1980-12-07T19:21:42+00:00"

var_dump( $moment->endOf('minutes')->isoDate() ); // string(25) "1980-12-07T19:21:59+00:00"
var_dump( $moment->endOf('hours')->isoDate() ); // string(25) "1980-12-07T19:59:59+00:00"
var_dump( $moment->endOf('days')->isoDate() ); // string(25) "1980-12-07T23:59:59+00:00"
var_dump( $moment->endOf('months')->isoDate() ); // string(25) "1980-12-31T23:59:59+00:00"
var_dump( $moment->endOf('years')->isoDate() ); // string(25) "1980-12-31T23:59:59+00:00"

查询

isLeapYear()

如果该年份是闰年,则返回 TRUE,否则返回 FALSE

$moment = new MomentPHP\MomentPHP('2012', 'Y');
var_dump( $moment->isLeapYear() ); // bool(true)

$moment = new MomentPHP\MomentPHP('2013', 'Y');
var_dump( $moment->isLeapYear() ); // bool(false)

isDST()

检查当前moment是否处于夏令时。

$moment = new MomentPHP\MomentPHP('06', 'm');
var_dump( $moment->isDST() ); // bool(true)

$moment = new MomentPHP\MomentPHP('12', 'm');
var_dump( $moment->isDST() ); // bool(false)

isBefore()

检查一个moment是否在另一个moment之前。

var_dump( $moment->isBefore('1980-12-31') ); // bool(true)

如果设置了单位,则将两个日期都设置为该单位的开头。

var_dump( $moment->isBefore('1980-12-31', 'months') ); // bool(false)

isAfter()

检查一个moment是否在另一个moment之后。它是IsBefore()的相反方法。

isSame()

检查一个moment是否与另一个moment相同。

var_dump( $moment->isSame('1980-12-07') ); // bool(false) because time for compare date is "00:00:00"
var_dump( $moment->startOf('days')->isSame() ); // bool(true) because time for origin date set on "00:00:00"

isMomentPHP()

检查一个变量是否是MomentPHP对象。

var_dump( $moment->isMomentPHP(new MomentPHP\MomentPHP) ); // bool(true)
var_dump( $moment->isMomentPHP(new DateTime) ); // bool(false)