此包已被弃用且不再维护。作者建议使用jenssegers/date包。

一个用于帮助您在不同语言中处理日期的日期库

v3.3.2 2018-05-04 07:53 UTC

README

Latest Stable Version Total Downloads Build Status Coverage Status Donate

此日期库扩展了Carbon,增加了多语言支持。如formatdiffForHumansparsecreateFromFormat和新的timespan等方法现在将根据您的区域设置进行翻译。

安装

使用composer安装

composer require jenssegers/date

Laravel

此包包含一个服务提供者,用于与Laravel框架集成。此提供者将获取应用程序的区域设置并用于翻译。要注册服务提供者,请在config/app.php文件中的提供者数组中添加以下内容:

'Jenssegers\Date\DateServiceProvider',

您也可以将其添加为config/app.php中的门面。

'Date' => Jenssegers\Date\Date::class,

语言

此包包含以下语言的本地化文件:

  • 阿尔巴尼亚语
  • 阿拉伯语
  • 阿塞拜疆语
  • 孟加拉语
  • 巴斯克语
  • 巴西葡萄牙语
  • 保加利亚语
  • 加泰罗尼亚语
  • 克罗地亚语
  • 简体中文
  • 繁体中文
  • 捷克语
  • 丹麦语
  • 荷兰语
  • 英语
  • 世界语
  • 爱沙尼亚语
  • 芬兰语
  • 法语
  • 加利西亚语
  • 格鲁吉亚语
  • 德语
  • 希腊语
  • 希伯来语
  • 印地语
  • 匈牙利语
  • 冰岛语
  • 印度尼西亚语
  • 意大利语
  • 日语
  • 哈萨克语
  • 韩语
  • 拉脱维亚语
  • 立陶宛语
  • 马其顿语
  • 马来语
  • 挪威语
  • 尼泊尔语(नेपाली)
  • 波兰语
  • 葡萄牙语
  • 波斯语(Farsi)
  • 罗马尼亚语
  • 俄语
  • 泰语
  • 塞尔维亚语(拉丁语)
  • 塞尔维亚语(西里尔语)
  • 斯洛伐克语
  • 斯洛文尼亚语
  • 西班牙语
  • 瑞典语
  • 土耳其语
  • 土库曼语
  • 乌克兰语
  • 乌兹别克语
  • 越南语
  • 威尔士语

用法

日期类扩展了Carbon的formatdiffForHumans等方法,并根据您的区域设置进行翻译。

use Jenssegers\Date\Date;

Date::setLocale('nl');

echo Date::now()->format('l j F Y H:i:s'); // zondag 28 april 2013 21:58:16

echo Date::parse('-1 day')->diffForHumans(); // 1 dag geleden

日期类还添加了一些别名和额外的方法,如:将diffForHumans的别名设置为ago,以及添加了timespan方法。

echo $date->timespan(); // 3 months, 1 week, 1 day, 3 hours, 20 minutes

parsecreateFromFormat等方法也支持“反向翻译”。当用已翻译的输入调用这些方法时,它将尝试将其翻译成英语后再传递给DateTime。

$date = Date::createFromFormat('l d F Y', 'zaterdag 21 maart 2015');

Carbon

Carbon是日期类基于的库。所有原始的Carbon操作仍然可用,有关更多信息,请参阅https://github.com/briannesbitt/Carbon。以下是一些可用方法:

创建日期

您可以使用和DateTime对象相同的方式创建Date对象(https://php.ac.cn/manual/en/datetime.construct.php

$date = new Date();
$date = new Date('2000-01-31');
$date = new Date('2000-01-31 12:00:00');

// With time zone
$date = new Date('2000-01-31', new DateTimeZone('Europe/Brussels'));

您可以直接跳过创建DateTimeZone对象

$date = new Date('2000-01-31', 'Europe/Brussels');

从相对格式创建Date对象(https://php.ac.cn/manual/en/datetime.formats.relative.php

$date = new Date('now');
$date = new Date('today');
$date = new Date('+1 hour');
$date = new Date('next monday');

这些静态方法也可以使用

$date = Date::parse('now');
$date = Date::now();

从时间戳创建Date对象

$date = new Date(1367186296);

或从现有日期或时间创建

$date = Date::createFromDate(2000, 1, 31);
$date = Date::createFromTime(12, 0, 0);
$date = Date::create(2000, 1, 31, 12, 0, 0);

日期格式化

您可以将Date对象格式化得像DateTime对象一样(https://php.ac.cn/manual/en/function.date.php

echo Date::now()->format('Y-m-d'); // 2000-01-31

Date对象可以被转换为字符串

echo Date::now(); // 2000-01-31 12:00:00

获取人类可读的输出(diffForHumans的别名)

echo $date->ago(); // 5 days ago

计算时间段

$date = new Date('+1000 days');
echo Date::now()->timespan($date);
// 2 years, 8 months, 3 weeks, 5 days

// or even
echo Date::now()->timespan('+1000 days');

获取自日期以来的年份

$date = new Date('-10 years');
echo $date->age; // 10

$date = new Date('+10 years');
echo $date->age; // -10

日期操作

您可以通过使用addsub方法以及相对间隔(https://php.ac.cn/manual/en/datetime.formats.relative.php)来操作

$yesterday = Date::now()->sub('1 day');
$tomorrow  = Date::now()->add('1 day');

// ISO 8601
$date = Date::now()->add('P2Y4DT6H8M');

您可以像访问和修改对象属性一样访问和修改所有日期属性

$date->year = 2013:
$date->month = 1;
$date->day = 31;

$date->hour = 12;
$date->minute = 0;
$date->second = 0;

贡献

您可以通过向lang目录添加新的语言文件轻松添加新语言。这些语言条目支持复数形式。通过使用“竖线”字符,您可以将字符串的单数和复数形式分开

'hour'      => '1 hour|:count hours',
'minute'    => '1 minute|:count minutes',
'second'    => '1 second|:count seconds',

一些语言在与像'ago'这样的后缀结合使用时,有不同的单位翻译。对于这些情况,您可以通过将后缀添加为单位键来添加额外的翻译

'year'          => '1 Jahr|:count Jahre',
'year_ago'      => '1 Jahr|:count Jahren',

还有一个generator.php脚本,可以快速输出特定区域设置的日和月翻译。如果您想添加新语言,这可以加快过程

php generator.php nl_NL

注意!如果您正在添加语言,请检查有关月份和日期名称大写的规则:http://meta.wikimedia.org/wiki/Capitalization_of_Wiktionary_pages#Capitalization_of_month_names

许可证

Laravel Date遵循MIT许可证(MIT)