carbon

#Carbon 时间处理类

Laravel 项目中的时间处理非常容易,引入 Carbon 时间处理类,github 拥有接近 5000 个 star。

安装

1
composer require nesbot/carbon

本地化

1
\Carbon\Carbon::setLocale('zh');

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
use Carbon\Carbon; // Carbon 类在 Carbon 命名空间中声明

// 获取当前时间
echo Carbon::now(); // 2017-04-07 16:32:28

// 今天
echo Carbon::today(); // 2017-04-07 00:00:00
// 明天
echo Carbon::tomorrow(); // 2017-04-08 00:00:00
// 昨天
echo Carbon::yesterday(); // 2017-04-06 00:00:00

// 获取前一天的开始时间
echo Carbon::now()->yesterday()->startOfDay(); // 2017-04-06 00:00:00
// 获取前一天的结束时间
echo Carbon::now()->yesterday()->endOfDay(); // 2017-04-06 23:59:59

//上一周开始时间 (星期一)
echo Carbon::now()->previous()->startOfWeek(); // 2017-03-27 00:00:00
// 这周周一
echo Carbon::now()->startOfWeek(); // 2017-04-03 00:00:00
//上一周结束时间 (星期天)
echo Carbon::now()->previous()->endOfWeek(); // 2017-04-02 23:59:59
// 这周周天
echo Carbon::now()->endOfWeek(); // 2017-04-09 23:59:59

//获取上一月的开始时间
echo Carbon::now()->subMonth(1)->startOfMonth(); // 2017-03-01 00:00:00
// 获取上一月的结束时间
echo Carbon::now()->subMonth(1)->endOfMonth(); // 2017-03-31 23:59:59
// 这个月的第一天开始时间
echo Carbon::now()->startOfMonth(); // 2017-04-01 00:00:00
// 这个月的最后一天结束时间
echo Carbon::now()->endOfMonth(); // 2017-04-30 23:59:59

// 获取上一年的开始时间
echo Carbon::now()->subYear(1)->startOfYear(); // 2016-01-01 00:00:00
// 今年开始时间
echo Carbon::now()->startOfYear(); // 2017-01-01 00:00:00
echo Carbon::now()->lastOfYear()->startOfYear(); // 2017-01-01 00:00:00
// 获取上一年的结束时间
echo Carbon::now()->subYear(1)->endOfYear(); // 2016-12-31 23:59:59
// 今年结束时间
echo Carbon::now()->endOfYear(); // 2017-12-31 23:59:59
echo Carbon::now()->lastOfYear()->endOfYear(); // 2017-12-31 23:59:59

// 获取当前时间的固定格式
echo Carbon::now()->format('Y-m-d'); // 2017-04-07
// 几号
echo Carbon::now()->day; // 7
// 几月
echo Carbon::now()->month; // 4
// 年
echo Carbon::now()->year; // 2017
// 小时
echo Carbon::now()->hour;
// 分钟
echo Carbon::now()->minute;
// 上周的今天是星期几
echo Carbon::now()->dayOfWeek; // 5
// 今天是365天中的第几天
echo Carbon::now()->dayOfYear; // 96
// 这个月中的第几周
echo Carbon::now()->weekOfMonth; // 1
// 年中的第几周
echo Carbon::now()->weekOfYear; // 14
// 季度
echo Carbon::now()->quarter; // 2
// 几岁
echo Carbon::createFromDate(1991, 5, 21)->age; // 25
// 这个月有几天
echo Carbon::now()->daysInMonth; // 30

var_dump(isset(Carbon::now()->hour)); // bool(true)
var_dump(empty(Carbon::now()->year)); // bool(false)

echo Carbon::now()->year(2017)->month(5)->day(21)->hour(22)->minute(32)->second(5)->toDateTimeString(); // 2017-05-21 22:32:05
echo Carbon::now()->setDate(2017, 5, 21)->setTime(22, 32, 5)->toDateTimeString(); // 2017-05-21 22:32:05
echo Carbon::now()->setDateTime(2017, 5, 21, 22, 32, 5)->toDateTimeString(); // 2017-05-21 22:32:05

// 日期解析
echo new Carbon('now');
echo Carbon::parse('now'); // 2017-04-07 17:54:35
echo Carbon::parse('today'); // 2017-04-07 00:00:00
echo Carbon::parse('yesterday'); // 2017-04-06 00:00:00
echo Carbon::parse('2 days ago'); // 2017-04-05 17:56:28
echo Carbon::parse('+3 days'); // 2017-04-10 17:57:14
echo Carbon::parse('-3 days'); // 2017-04-04 17:57:37
echo Carbon::parse('+2 weeks'); // 2017-04-21 17:58:05
echo Carbon::parse('+4 months'); // 2017-08-07 17:58:32
echo Carbon::parse('-1 year'); // 2016-04-07 17:58:56
echo Carbon::parse('next wednesday'); // 2017-04-12 00:00:00
echo Carbon::parse('last friday'); // 2017-03-31 00:00:00

// 将carbon对象转换成string类型
echo Carbon::createFromTimestamp(-1)->toDateTimeString(); // 1970-01-01 07:59:59
echo Carbon::now()->toDateString(); // 2017-04-07
echo Carbon::now()->toDateTimeString(); // 2017-04-07 16:53:28
echo Carbon::now()->toFormattedDateString(); // Apr 7, 2017
echo Carbon::now()->toTimeString(); // 18:04:00
echo Carbon::now()->toDayDateTimeString(); // Fri, Apr 7, 2017 6:04 PM

// 获取当前时间的时间戳
echo Carbon::now()->timestamp; // 1491554091

echo Carbon::now()->timestamp(1491554091)->toDateTimeString(); // 2017-04-07 16:34:51

// 设置当前地区的时区
echo Carbon::now()->timezone('Asia/Shanghai'); // 2017-04-07 16:35:35

// 直接使用字符串
echo Carbon::now('Europe/London'); // 2017-04-07 09:36:41

// createFromDate()将默认的时间到现在。 createFromTime()将日期默认为今天。
echo Carbon::createFromDate(2018, 1, 1, 'Europe/London'); // 2018-01-01 16:39:40
echo Carbon::createFromFormat('Y-m-d H', '1975-05-21 22')->toDateTimeString(); // 1975-05-21 22:00:00
echo Carbon::createFromFormat('Y-m-d H', '1975-05-21 22'); // 1975-05-21 22:00:00

// create()将默认任何null参数到当前相应的值
echo Carbon::create(2000, 1, 1, 0, 0, 0); // 2000-01-01 00:00:00

// 日期比较
echo Carbon::now()->tzName; // PRC
$first = Carbon::create(2017, 4, 10, 11, 26, 30);
$second = Carbon::create(2017, 4, 10, 11, 26, 30, 'Asia/Shanghai');

echo $first->toDateTimeString(); // 2017-04-10 11:26:30
echo $first->tzName; // PRC
echo $second->toDateTimeString(); // 2017-04-10 11:26:30
echo $second->tzName; // Asia/Shanghai

// 判断两个日期是否相等
var_dump($first->eq($second)); // bool(true)
// 判断第一个日期是否不等于第二个日期
var_dump($first->ne($second)); // bool(false)
// 判断第一个日期是否比第二个日期大
var_dump($first->gt($second)); // bool(false)
// 判断第一个日期是否大于等于第二个日期
var_dump($first->gte($second)); // bool(true)
// 判断第一个日期是否比第二个日期小
var_dump($first->lt($second)); // bool(false)
// 判断第一个日期是否小于等于第二个日期
var_dump($first->lte($second)); // bool(true)

// 设置日期和时间
$first->setDateTime(2017, 1, 1, 0, 0, 0);
$second->setDateTime(2017, 1, 1, 0, 0, 0);

var_dump($first->eq($second)); // bool(true)
var_dump($first->ne($second)); // bool(false)
var_dump($first->gt($second)); // bool(false)
var_dump($first->gte($second)); // bool(true)
var_dump($first->lt($second)); // bool(false)
var_dump($first->lte($second)); // bool(true)

// 要判断一个日期是否介于两个日期之间,可以使用 between() 方法,第三个可选参数指定比较是否可以相等,默认为 true
$first = Carbon::create(2012, 9, 5, 1);
$second = Carbon::create(2012, 9, 5, 5);
var_dump(Carbon::create(2012, 9, 5, 3)->between($first, $second)); // bool(true)
var_dump(Carbon::create(2012, 9, 5, 5)->between($first, $second)); // bool(true)
var_dump(Carbon::create(2012, 9, 5, 5)->between($first, $second, false)); // bool(false)

$dt1 = Carbon::create(2012, 1, 1, 0, 0, 0);
$dt2 = Carbon::create(2014, 1, 30, 0, 0, 0);
// 返回最小日期
echo $dt1->min($dt2); // 2012-01-01 00:00:00

$dt1 = Carbon::create(2012, 1, 1, 0, 0, 0);
$dt2 = Carbon::create(2014, 1, 30, 0, 0, 0);
// 返回最大日期
echo $dt1->max($dt2); // 2014-01-30 00:00:00

// now is the default param
$dt1 = Carbon::create(2000, 1, 1, 0, 0, 0);
echo $dt1->max(); // 2017-04-10 11:51:23

$dt = Carbon::now();

// 确定实例是一个工作日
$dt->isWeekday();
// 确定实例是周末的一天
$dt->isWeekend();
$dt->isYesterday();
$dt->isToday();
$dt->isTomorrow();
// 是否比现在的时间大
$dt->isFuture();
// 是否比现在的时间小
$dt->isPast();
// 确定实例是闰年
$dt->isLeapYear();
// 检查传入日期是同一天的当前实例
$dt->isSameDay(Carbon::now());
$born = Carbon::createFromDate(1987, 4, 23);
$noCake = Carbon::createFromDate(2014, 9, 26);
$yesCake = Carbon::createFromDate(2014, 4, 23);
$overTheHill = Carbon::now()->subYears(50);
// 检查它的生日。比较两个日期的日期
var_dump($born->isBirthday($noCake)); // bool(false)
var_dump($born->isBirthday($yesCake)); // bool(true)
var_dump($overTheHill->isBirthday()); // bool(true) -> default compare it to today!

// 日期操作
// add(增加), sub(减去)
$dt = Carbon::create(2017, 4, 10, 0);

echo $dt->toDateTimeString(); // 2017-04-10 00:00:00

echo $dt->addYears(5); // 2022-04-10 00:00:00
echo $dt->addYear(); // 2023-04-10 00:00:00
echo $dt->subYear(); // 2022-04-10 00:00:00
echo $dt->subYears(5); // 2017-04-10 00:00:00

echo $dt->addMonths(6); // 2017-10-10 00:00:00
echo $dt->addMonth(); // 2017-11-10 00:00:00 equivalent of $dt->month($dt->month + 1); so it wraps
echo $dt->subMonth(); // 2017-10-10 00:00:00
echo $dt->subMonths(6); // 2017-04-10 00:00:00

echo $dt->addDays(5); // 2017-04-15 00:00:00
echo $dt->addDay(); // 2017-04-16 00:00:00
echo $dt->subDay(); // 2017-04-15 00:00:00
echo $dt->subDays(5); // 2017-04-10 00:00:00

echo $dt->addWeekdays(4); // 2017-04-14 00:00:00
echo $dt->addWeekday(); // 2017-04-17 00:00:00
echo $dt->subWeekday(); // 2017-04-14 00:00:00
echo $dt->subWeekdays(4); // 2017-04-10 00:00:00

echo $dt->addWeeks(1); // 2017-04-17 00:00:00
echo $dt->addWeek(); // 2017-04-24 00:00:00
echo $dt->subWeek(); // 2017-04-17 00:00:00
echo $dt->subWeeks(1); // 2017-04-10 00:00:00

echo $dt->addHours(24); // 2017-04-11 00:00:00
echo $dt->addHour(); // 2017-04-11 01:00:00
echo $dt->subHour(); // 2017-04-11 00:00:00
echo $dt->subHours(24); // 2017-04-10 00:00:00

echo $dt->addMinutes(61); // 2017-04-10 01:01:00
echo $dt->addMinute(); // 2017-04-10 01:02:00
echo $dt->subMinute(); // 2017-04-10 01:01:00
echo $dt->subMinutes(61); // 2017-04-10 00:00:00

echo $dt->addSeconds(61); // 2017-04-10 00:01:01
echo $dt->addSecond(); // 2017-04-10 00:01:02
echo $dt->subSecond(); // 2017-04-10 00:01:01
echo $dt->subSeconds(61); // 2017-04-10 00:00:00

// modify 方法,参数格式为 + 或 - 跟上值及单位
echo Carbon::now()->modify('+15 days'); // 2017-04-25 12:26:02
echo Carbon::now()->modify('-2 days'); // 2017-04-08 12:26:02
echo Carbon::now()->modify('-2 day'); // 2017-04-08 12:28:31
echo Carbon::now()->modify('-2 weekday'); // 2017-04-06 00:00:00
echo Carbon::now()->modify('-2 month'); // 2017-02-10 12:29:36
echo Carbon::now()->modify('-2 year'); // 2015-04-10 12:31:13
echo Carbon::now()->modify('-2 week'); // 2017-03-27 12:31:13
echo Carbon::now()->modify('-2 hour'); // 2017-04-10 10:31:13
echo Carbon::now()->modify('-2 minute'); // 2017-04-10 12:29:13
echo Carbon::now()->modify('-2 second'); // 2017-04-10 12:31:11

echo Carbon::now()->subDays(5)->diffForHumans(); // 5天前

echo Carbon::now()->diffForHumans(Carbon::now()->subYear()); // 1年后

$dt = Carbon::createFromDate(2017, 4, 1);

echo $dt->diffForHumans($dt->copy()->addMonth()); // 1月前
echo $dt->diffForHumans($dt->copy()->subMonth()); // 1月后

echo Carbon::now()->addSeconds(5)->diffForHumans(); // 距现在5秒

echo Carbon::now()->subDays(24)->diffForHumans(); // 3周前
echo Carbon::now()->subDays(24)->diffForHumans(null, true); // 3周

$dt = Carbon::now();
// 年的差异
echo $dt->diffInYears($dt->copy()->addYear(2)); // 2
echo $dt->diffInMonths(); // 0
echo $dt->diffInMinutes(); // 0

学习参考

官方文档
Carbon

如果对您有用,请博主喝杯咖啡!

热评文章