Carbon 对象,可以直接当做字符串使用。所以在咱们日常Curd时,开发效率非常高。
//Carbon对象可以直接当做字符串赋值到model的字段
$model = new CashCreditPaidAmountModel();
$model->create_time = now();
$model->update_time = now();
//select * from cash_credit where due_date = '2022-11-15';
CashCreditModel::where('due_date', today())->get();
//select * from cash_credit where apply_time between '2022-11-15 00:00:00' and '2022-11-15 23:59:59';
CashCreditModel::whereBetween('apply_time', [
today(),
today->endOfDay()
])->get();
//Question: 为啥可以把 Carbon 对象直接当做字符串使用?
//Answer:因为 Carbon 实现了 php 的魔术方法 __toString。
//而 __toString 里面的代码就是把当前 Carbon 对象转换为 Y-m-d H:i:s 格式的字符串。
Carbon 的常见使用方法汇总
//当前时间 2022-11-15 14:00:00
now();
//今天的日期 2022-11-15
today();
//昨天的日期 2022-11-14
yesterday();
today()->subDay();
//明天的日期 2022-11-16
tomorrow();
today()->addDay();
//Carbon对象转换为Y-m-d的字符串
today()->toDateString(); //"2022-11-15"
//Carbon对象转换为Y-m-d H:i:s的字符串
today()->toDateTimeString(); //"2022-11-15 00:00:00"
//Carbon对象转换为其他格式
now()->format('d/m/Y'); //"15/11/2022"
//把字符串转换为Carbon对象
//1: 如果时间字符串的格式为 Y-m-d H:i:s 或者 Y-m-d,可以直接解析
carbon('2022-02-28 18:01:59');
carbon('2022-02-28');
//2: 如果时间字符串的格式不是 Y-m-d H:i:s
$string = '02/28/2022 18:01:59';
Carbon::createFromFormat('m/d/Y H:i:s', $string);
//2个时间比较大小
carbon('2022-01-01') < today(); //true
//2个时间的天数差
carbon('2022-01-01')->diffInDays(carbon('2022-01-31')); //30
//2个时间的月份差
carbon('2022-01-01')->diffInMonths(carbon('2022-12-31')); //11
//2个时间的年份差
carbon('2000-01-01')->diffInYears(carbon('2022-12-31')); //22
//求年龄
carbon('2000-01-01')->age; //22
//年
carbon('2000-12-31')->year; //2000
//月
carbon('2000-12-31')->month; //12
//日
carbon('2000-12-31')->day; //31
//时
carbon('2000-12-31 18:11:59')->hour; //18
//分
carbon('2000-12-31 18:11:59')->minute; //11
//秒
carbon('2000-12-31 18:11:59')->second; //59
//Unix时间戳
carbon('2022-12-31 18:11:59')->timestamp; //1672492319
//判断当前时间是否处于某个范围
now()->between(carbon('2000-01-01'), '2023-01-01');
//判断当前时间是否处于上午9:00~下午18:59
now()->between(carbon('9:00'), carbon('18:59'));
//时间做加减法
//PS:多次对同一个 Carbon 对象进行操作,每次操作之前必须先 clone。
//因为每次操作都是针对同一个对象
carbon('2000-01-01')->addDays(10); //2000-01-11
carbon('2000-01-30')->subDays(10); //2000-01-20
carbon('2022-01-01')->addYears(100); //2122-01-01
carbon('2022-01-01')->subYears(100); //1922-01-01
carbon('2022-01-01')->addMonths(11); //2022-12-01
carbon('2022-12-01')->subMonths(11); //2022-01-01
//对时间进行加减法,分为2种模式:Overflow、NoOverflow。默认是 Overflow 模式。
//这里以加减月份作为例子,展示它们的区别 (加减年份,也是类似)
carbon('2022-01-31')->addMonths(1); //2022-03-03
carbon('2022-01-31')->addMonthsNoOverflow(1); //2022-02-28
carbon('2022-03-31')->subMonths(1); //2022-03-03
carbon('2022-03-31')->subMonthsNoOverflow(1); //2022-02-28
//总结:如果是针对月底(年底),大部分情况,咱们得使用 NoOverflow 模式
carbon('2000-11-11')->startOfYear(); //2000-01-01 00:00:00
carbon('2000-11-01')->endOfYear(); //2000-12-31 23:59:59
carbon('2000-01-31')->startOfMonth(); //2000-01-01 00:00:00
carbon('2000-01-01')->endOfMonth(); //2000-01-31 23:59:59
carbon('2000-01-01 18:30:00')->startOfDay(); //2000-01-01 00:00:00
carbon('2000-01-01 18:30:00')->endOfDay(); //2000-01-01 23:59:59
carbon('2000-01-01 18:30:00')->startOfHour(); //2000-01-01 18:00:00
carbon('2000-01-01 18:30:00')->endOfHour(); //2000-01-01 18:59:59
carbon('2000-01-01 12:33:11')->startOfMinute(); //2000-01-01 12:33:00
carbon('2000-01-01 12:33:11')->endOfMinute(); //2000-01-01 12:33:59
1. BaseModel 关闭了 create_time、update_time 的自动更新
所以:新增数据时,要手动赋值 create_time = now(); 更新数据时,要手动赋值 update_time = now()
image2. 如果实在想让 create_time、update_time 自动更新,请继承 TimeBaseModel
PS:目前只有部分支付相关的 Model 继承了 TimeBaseModel。
其他情况请继承 BaseModel,然后自己去维护 create_time、update_time字段,这也是我推荐的
image
网友评论