lawondyss / moment-php
MomentPHP 是一个用于解析、操作和格式化日期的库。
Requires
- php: >= 5.3.0
Requires (Dev)
- nette/tester: @dev
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)