Carbon::parse -> 设置默认为英国格式
Carbon::parse -> set default to UK format
我的用户在表单中输入数据以搜索日期。我收到的字符串的格式可以按照以下示例:tomorrow
、next week
、last year
或 01/03/2017
。正如您所注意到的,输入字段旨在为用户提供尽可能灵活的设计。
所以无论如何,问题是我的一些用户是英国人。因此,当他们输入 1/3/2017
时,他们打算表示 2017 年 3 月 1 日。但是,以下代码:
Carbon::parse ($input);
将日期解释为 2017 年 1 月 3 日。在您通过建议 Carbon::createFromFormat()
之类的解决方法来浪费您和我的时间之前,请注意上面的一点,我注意到灵活性是此处功能的关键部分。
我想我最终可能要做的是扩展 Carbon{}
class 和 parse()
函数,然后用一些正则表达式交换字符串,以便 1/3/2017
在被 Carbon 处理之前变为 3/1/2017
。
不过,也许有些聪明的人知道更好的方法让 Carbon 对 language/territory/region 敏感?
非常感谢!
好的,这是我想出的代码片段,它将接受 Carbon 有效字符串,如 "tomorrow" 等或 Unix 时间纪元。
$dt = is_numeric($userDate)? Carbon::createFromTimestamp((float)$userDate)
: new Carbon($userDate);
我们的想法是始终向服务器发送一致的格式,并在将它们发送到服务器之前在客户端进行所有转换。每个语言平台都有将时间从语言环境转换为 unix 纪元的工具,所以应该不会太难。
正如您提到的,通过做这样的事情来制作替代碳 class 怎么样?
在config/app.php
<?php
'aliases' => [
// all of the aliases
'Carbon' => App\Carbon::class,
],
然后创建这个 class:
<?php
namespace App;
use Carbon\Carbon as BaseCarbon;
class Carbon
{
public static function parse($time = null, $tz = null)
{
try {
return BaseCarbon::createFromFormat('d-m-Y', $time, $tz);
} catch (\Exception $e) {
// This will allow you to catch on when you pass a string like "tomorrow"
return BaseCarbon::parse($time, $tz);
}
}
}
现在您可以 Carbon::parse('2-3-2010');
并将其视为 2010 年 3 月 2 日,或者 Carbon::parse('tomorrow');
并将其视为明天。
您可以想出其他方法来构建此格式,以便可以根据用户区域设置或其他内容来指定格式。
当你知道去哪里找的时候!!
http://php.net/manual/en/datetime.formats.php
显然以下内容是正确的:
$american = Carbon::parse ('1/3/2017'); // Jan 3, 2017
$european = Carbon::parse ('1-3-2017'); // 1 March, 2017
所以将斜杠改为破折号(或破折号改为斜杠)就是我想要的答案!
我的用户在表单中输入数据以搜索日期。我收到的字符串的格式可以按照以下示例:tomorrow
、next week
、last year
或 01/03/2017
。正如您所注意到的,输入字段旨在为用户提供尽可能灵活的设计。
所以无论如何,问题是我的一些用户是英国人。因此,当他们输入 1/3/2017
时,他们打算表示 2017 年 3 月 1 日。但是,以下代码:
Carbon::parse ($input);
将日期解释为 2017 年 1 月 3 日。在您通过建议 Carbon::createFromFormat()
之类的解决方法来浪费您和我的时间之前,请注意上面的一点,我注意到灵活性是此处功能的关键部分。
我想我最终可能要做的是扩展 Carbon{}
class 和 parse()
函数,然后用一些正则表达式交换字符串,以便 1/3/2017
在被 Carbon 处理之前变为 3/1/2017
。
不过,也许有些聪明的人知道更好的方法让 Carbon 对 language/territory/region 敏感?
非常感谢!
好的,这是我想出的代码片段,它将接受 Carbon 有效字符串,如 "tomorrow" 等或 Unix 时间纪元。
$dt = is_numeric($userDate)? Carbon::createFromTimestamp((float)$userDate)
: new Carbon($userDate);
我们的想法是始终向服务器发送一致的格式,并在将它们发送到服务器之前在客户端进行所有转换。每个语言平台都有将时间从语言环境转换为 unix 纪元的工具,所以应该不会太难。
正如您提到的,通过做这样的事情来制作替代碳 class 怎么样?
在config/app.php
<?php
'aliases' => [
// all of the aliases
'Carbon' => App\Carbon::class,
],
然后创建这个 class:
<?php
namespace App;
use Carbon\Carbon as BaseCarbon;
class Carbon
{
public static function parse($time = null, $tz = null)
{
try {
return BaseCarbon::createFromFormat('d-m-Y', $time, $tz);
} catch (\Exception $e) {
// This will allow you to catch on when you pass a string like "tomorrow"
return BaseCarbon::parse($time, $tz);
}
}
}
现在您可以 Carbon::parse('2-3-2010');
并将其视为 2010 年 3 月 2 日,或者 Carbon::parse('tomorrow');
并将其视为明天。
您可以想出其他方法来构建此格式,以便可以根据用户区域设置或其他内容来指定格式。
当你知道去哪里找的时候!! http://php.net/manual/en/datetime.formats.php
显然以下内容是正确的:
$american = Carbon::parse ('1/3/2017'); // Jan 3, 2017
$european = Carbon::parse ('1-3-2017'); // 1 March, 2017
所以将斜杠改为破折号(或破折号改为斜杠)就是我想要的答案!