[nesbot/carbon]轻松优雅的驾驭时间处理

这篇具有很好参考价值的文章主要介绍了[nesbot/carbon]轻松优雅的驾驭时间处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

[nesbot/carbon]轻松优雅的驾驭时间处理

简介

这个库的名字其实就很有意思:“carbon”,是化学元素的名字“碳”,为什么叫这个名字呢?在科学界,有一个"放射性碳定年法"的东西,是一种利用碳的同位素14C的放射性来对含有有机物质的物品进行年代测定的方法。从这意义上讲,他是要处理时间的。

我们在开发中,经常需要处理时间的格式化显示。比如计算两个时间差多长时间,明天的时间,本周的时间,以及人性化的输出“几天前”时间变化,这时候我们可能会手忙脚乱的去网上复制代码,最后搞得代码乱糟糟的。

但实际上,这些用这一个库都能实现:

实例

安装

composer require nesbot/carbon

精简却全面的案例

<?php
$date = Carbon::now()->locale('zh_CN');
echo "\n";
echo $date->locale();            
echo "\n";
echo $date->diffForHumans('2023-08-13');     
echo "\n";
echo $date->monthName;           
echo "\n";
echo $date->isoFormat('LLLL');

输出如下:

2023年4月28日星期五早上8点03分zh_CN
3个月前
四月
2023年4月28日星期五早上8点03分

在上面的例子中,几乎没有任何逻辑代码,只是通过静态方法创建了一个对象,然后调用输出就可以。

在上面,我们创建了当前时间,按照本地化输出时间,同时对比一下相较于给定的时间还差多久,输出一下月份。

多种设置时间的方式

carbon支持各种方式去设置具体的时间,有时候我们接收到的日期并不完整,此时可以用它做一个统一的处理,免得在不同数据库之间的默认行为产生兼容性问题。

$dt = Carbon::now();

$dt->year(1975)->month(5)->day(21)->hour(22)->minute(32)->second(5)->toDateTimeString();
$dt->setDate(1975, 5, 21)->setTime(22, 32, 5)->toDateTimeString();
$dt->setDate(1975, 5, 21)->setTimeFromTimeString('22:32:05')->toDateTimeString();
$dt->setDateTime(1975, 5, 21, 22, 32, 5)->toDateTimeString();

// All allow microsecond as optional argument
$dt->year(1975)->month(5)->day(21)->hour(22)->minute(32)->second(5)->microsecond(123456)->toDateTimeString();
$dt->setDate(1975, 5, 21)->setTime(22, 32, 5, 123456)->toDateTimeString();
$dt->setDate(1975, 5, 21)->setTimeFromTimeString('22:32:05.123456')->toDateTimeString();
$dt->setDateTime(1975, 5, 21, 22, 32, 5, 123456)->toDateTimeString();

$dt->timestamp(169957925); // Note: timestamps are UTC but do not change the date timezone

$dt->timezone('Europe/London')->tz('America/Toronto')->setTimezone('America/Vancouver');

轻松地获取到时间周期

我们会经常去获取开始时间爱你和结束时间,比如一天的开始时间和结束时间,本周的开始时间和结束时间,今年的开始时间和结束时间,现在用它几乎不需要任何处理,直接调用内置方法就够了。

$dt = new Carbon('2012-01-31 15:32:45.654321');
echo $dt->startOfSecond()->format('s.u');          // 45.000000


$dt = new Carbon('2012-01-31 15:32:45.654321');
echo $dt->endOfSecond()->format('s.u');            // 45.999999

$dt = new Carbon('2012-01-31 15:32:45.654321');
echo $dt->startOf('second')->format('s.u');        // 45.000000

$dt = new Carbon('2012-01-31 15:32:45.654321');
echo $dt->endOf('second')->format('s.u');          // 45.999999
// ->startOf() and ->endOf() are dynamic equivalents to those methods

$dt = Carbon::create(2012, 1, 31, 15, 32, 45);
echo $dt->startOfMinute();                         // 2012-01-31 15:32:00

$dt = Carbon::create(2012, 1, 31, 15, 32, 45);
echo $dt->endOfMinute();                           // 2012-01-31 15:32:59

$dt = Carbon::create(2012, 1, 31, 15, 32, 45);
echo $dt->startOfHour();                           // 2012-01-31 15:00:00

$dt = Carbon::create(2012, 1, 31, 15, 32, 45);
echo $dt->endOfHour();                             // 2012-01-31 15:59:59

$dt = Carbon::create(2012, 1, 31, 15, 32, 45);
echo Carbon::getMidDayAt();                        // 12
echo $dt->midDay();                                // 2012-01-31 12:00:00
Carbon::setMidDayAt(13);
echo Carbon::getMidDayAt();                        // 13
echo $dt->midDay();                                // 2012-01-31 13:00:00
Carbon::setMidDayAt(12);

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfDay();                            // 2012-01-31 00:00:00

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->endOfDay();                              // 2012-01-31 23:59:59

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfMonth();                          // 2012-01-01 00:00:00

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->endOfMonth();                            // 2012-01-31 23:59:59

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfYear();                           // 2012-01-01 00:00:00

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->endOfYear();                             // 2012-12-31 23:59:59

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfDecade();                         // 2010-01-01 00:00:00

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->endOfDecade();                           // 2019-12-31 23:59:59

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfCentury();                        // 2001-01-01 00:00:00

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->endOfCentury();                          // 2100-12-31 23:59:59

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfWeek();                           // 2012-01-30 00:00:00
var_dump($dt->dayOfWeek == Carbon::MONDAY);        // bool(true) : ISO8601 week starts on Monday

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->endOfWeek();                             // 2012-02-05 23:59:59
var_dump($dt->dayOfWeek == Carbon::SUNDAY);        // bool(true) : ISO8601 week ends on Sunday

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->next(Carbon::WEDNESDAY);                 // 2012-02-01 00:00:00
var_dump($dt->dayOfWeek == Carbon::WEDNESDAY);     // bool(true)
echo $dt->next('Wednesday');                       // 2012-02-08 00:00:00
echo $dt->next('04:00');                           // 2012-02-08 04:00:00
echo $dt->next('12:00');                           // 2012-02-08 12:00:00
echo $dt->next('04:00');                           // 2012-02-09 04:00:00

$dt = Carbon::create(2012, 1, 1, 12, 0, 0);
echo $dt->next();                                  // 2012-01-08 00:00:00

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->previous(Carbon::WEDNESDAY);             // 2012-01-25 00:00:00
var_dump($dt->dayOfWeek == Carbon::WEDNESDAY);     // bool(true)

$dt = Carbon::create(2012, 1, 1, 12, 0, 0);
echo $dt->previous();                              // 2011-12-25 00:00:00

$start = Carbon::create(2014, 1, 1, 0, 0, 0);
$end = Carbon::create(2014, 1, 30, 0, 0, 0);
echo $start->average($end);                        // 2014-01-15 12:00:00

echo Carbon::create(2014, 5, 30, 0, 0, 0)->firstOfMonth();                       // 2014-05-01 00:00:00
echo Carbon::create(2014, 5, 30, 0, 0, 0)->firstOfMonth(Carbon::MONDAY);         // 2014-05-05 00:00:00
echo Carbon::create(2014, 5, 30, 0, 0, 0)->lastOfMonth();                        // 2014-05-31 00:00:00
echo Carbon::create(2014, 5, 30, 0, 0, 0)->lastOfMonth(Carbon::TUESDAY);         // 2014-05-27 00:00:00
echo Carbon::create(2014, 5, 30, 0, 0, 0)->nthOfMonth(2, Carbon::SATURDAY);      // 2014-05-10 00:00:00

echo Carbon::create(2014, 5, 30, 0, 0, 0)->firstOfQuarter();                     // 2014-04-01 00:00:00
echo Carbon::create(2014, 5, 30, 0, 0, 0)->firstOfQuarter(Carbon::MONDAY);       // 2014-04-07 00:00:00
echo Carbon::create(2014, 5, 30, 0, 0, 0)->lastOfQuarter();                      // 2014-06-30 00:00:00
echo Carbon::create(2014, 5, 30, 0, 0, 0)->lastOfQuarter(Carbon::TUESDAY);       // 2014-06-24 00:00:00
echo Carbon::create(2014, 5, 30, 0, 0, 0)->nthOfQuarter(2, Carbon::SATURDAY);    // 2014-04-12 00:00:00
echo Carbon::create(2014, 5, 30, 0, 0, 0)->startOfQuarter();                     // 2014-04-01 00:00:00
echo Carbon::create(2014, 5, 30, 0, 0, 0)->endOfQuarter();                       // 2014-06-30 23:59:59

echo Carbon::create(2014, 5, 30, 0, 0, 0)->firstOfYear();                        // 2014-01-01 00:00:00
echo Carbon::create(2014, 5, 30, 0, 0, 0)->firstOfYear(Carbon::MONDAY);          // 2014-01-06 00:00:00
echo Carbon::create(2014, 5, 30, 0, 0, 0)->lastOfYear();                         // 2014-12-31 00:00:00
echo Carbon::create(2014, 5, 30, 0, 0, 0)->lastOfYear(Carbon::TUESDAY);          // 2014-12-30 00:00:00
echo Carbon::create(2014, 5, 30, 0, 0, 0)->nthOfYear(2, Carbon::SATURDAY);       // 2014-01-11 00:00:00

echo Carbon::create(2018, 2, 23, 0, 0, 0)->nextWeekday();                        // 2018-02-26 00:00:00
echo Carbon::create(2018, 2, 23, 0, 0, 0)->previousWeekday();                    // 2018-02-22 00:00:00
echo Carbon::create(2018, 2, 21, 0, 0, 0)->nextWeekendDay();                     // 2018-02-24 00:00:00
echo Carbon::create(2018, 2, 21, 0, 0, 0)->previousWeekendDay();                 // 2018-02-18 00:00:00

更多用法

实际上carbon还有很多的用法,比如跨时区计算实际的发生时差,按各种不同的标准输出等等。

特点

1. 易学易用:Carbon扩展了PHP的DateTime类,使其更加友好、易学。

2. 链式操作:Carbon支持链式操作,可以在一行代码中完成多个日期操作。

3. 兼容性强:由于基于PHP DateTime类,Carbon具有与PHP内置DateTime的大部分功能和兼容性,因此在很多地方都可以直接替换原生的DateTime类。

4. 多语言支持:Carbon支持多语言,可以根据需要设置日期的语言格式。

总之,nesbot/carbon是一个十分实用的日期时间处理扩展库,具有易学易用、链式操作、兼容性强、多语言支持等多个优点。它简化了PHP的日期处理代码,让开发更加高效、快捷。

原文标题:[nesbot/carbon]轻松优雅的驾驭时间处理

原文地址:https://phpreturn.com/index/a644b5fd15ec31.html

原文平台:PHP武器库

版权声明:本文由phpreturn.com(PHP武器库官网)原创和首发,所有权利归phpreturn(PHP武器库)所有,本站允许任何形式的转载/引用文章,但必须同时注明出处。文章来源地址https://www.toymoban.com/news/detail-428319.html

到了这里,关于[nesbot/carbon]轻松优雅的驾驭时间处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 编程新时代:Amazon CodeWhisperer 助您轻松驾驭代码世界

    Amazon CodeWhisperer 是一款由机器学习提供支持的代码生成器,可实时提供代码建议。当在 IDE 中编写代码时,CodeWhisperer 会根据你的注释和现有代码自动生成建议。 它支持 15 种编程语言,包括 Python、Java 和 JavaScript,以及您最喜欢的集成开发环境 (IDE),包括 VS Code、IntelliJ IDEA、

    2024年02月08日
    浏览(36)
  • 利用远程IO模块,轻松驾驭食品包装生产的自动化

    常见的自动化包装系统,它的核心部分通常由一系列高端设备组成,包括自动开箱机、自动封箱机、自动捆扎机、装箱机器人、码垛机器人等。这些设备协同工作,形成一条高效运转的生产线,从开箱到装箱,再到码垛,每一个环节都自动化完成,大大提升了生产效率。 在大

    2024年02月07日
    浏览(51)
  • 探索设计模式的魅力:迭代器模式让你轻松驾驭复杂数据集合

    ​🌈 个人主页: danci_ 🔥 系列专栏: 《设计模式》 💪🏻 制定明确可量化的目标,并且坚持默默的做事。 🚀 定义迭代器模式 用来提供一种方法顺序访问一个集合对象中的各个元素,而不需要暴露该对象的内部表示。 就像一个迷宫探险家,在复杂的迷宫通道中逐一探索,

    2024年02月22日
    浏览(46)
  • Java 日期和时间 API:实用技巧与示例 - 轻松处理日期和时间

    Scanner 类用于获取用户输入,它位于 java.util 包中。 要使用 Scanner 类,请执行以下步骤: 导入 java.util.Scanner 包。 创建一个 Scanner 对象,并将其初始化为 System.in 。 使用 Scanner 对象的方法读取用户输入。 Scanner 类提供了各种方法来读取不同类型的数据: 方法 描述 nextBoolean()

    2024年03月09日
    浏览(101)
  • 数据分析-Pandas如何轻松处理时间序列数据

    时间序列数据在数据分析建模中很常见,例如天气预报,空气状态监测,股票交易等金融场景。此处选择巴黎、伦敦欧洲城市空气质量监测 N O 2 NO_2 N O 2 ​ 数据作为样例。 python数据分析-数据表读写到pandas 经典算法-遗传算法的python实现 经典算法-遗传算法的一个简单例子 大

    2024年01月25日
    浏览(45)
  • 解锁讯飞星火:从零开始,教你如何轻松驾驭这款全能AI工具

    星火助手中心   |  原创作者/编辑:凯哥Java                      |  分类:人工智能学习系列教程 0 1 前言 在之前的文章中,介绍了AI的好处,但是我们知道,因为种种原因,在国内想要访问AI需要通过上网手段才可以访问到,而且还有封号风险。今天凯哥给大家介绍一款

    2024年02月21日
    浏览(70)
  • 轻松驾驭Python格式化:5个F-String实用技巧分享

    F-String (格式化字符串字面值)是在Python 3.6中引入的,它是一种非常强大且灵活的字符串格式化方法。 它允许你在字符串中嵌入表达式,这些表达式在运行时会被求值并转换为字符串, 这种特性使得 F-String 在编写 Python 代码时能够更简洁、更直观地处理字符串。 本文总结了

    2024年03月12日
    浏览(59)
  • 掌握Go语言:Go语言类型转换,解锁高级用法,轻松驾驭复杂数据结构(30)

    在Go语言中,类型转换不仅仅局限于简单的基本类型之间的转换,还可以涉及到自定义类型、接口类型、指针类型等的转换。以下是Go语言类型转换的高级用法详解: Go语言类型转换的高级用法 1. 自定义类型之间的转换 在Go语言中,可以使用类型别名或自定义类型来创建新的

    2024年04月09日
    浏览(69)
  • 「如何优雅有效利用周末和下班时间?」

    眼望古城街尽,心谱落愁无序,旧时的誓言,曾而相似,河水在遵循河道的指引下,在曲折前进中放声的歌唱。我却在心中念道,懂得欣赏,所以月圆为画,月缺为诗。 对于打工人和学生党来说,周末或者下班时间是一段宝贵的时间,可以用来放松身心、休息和充电。然而,

    2024年02月14日
    浏览(37)
  • uni-app优雅的实现时间戳转换日期格式

    现在显示的格式如下图: 我期望统一格式,所以不妨前端处理一下,核心代码如下 使用方法如下: 代码结构如下:

    2024年02月16日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包