我想知道这是否可行,所以让我说我有一个这样的模型:
MyModel
SomeDate - Carbon
Run Code Online (Sandbox Code Playgroud)
现在,我也有一个当前用户的时区,如下所示:
User
MyTimezone
Run Code Online (Sandbox Code Playgroud)
存储在数据库中的时区始终以UTC格式存储(以确保一切都一致),并且输出日期应始终格式化为特定时区(但每个用户的时区不同),例如America1/Chicago for User1和America /用户2的丹佛.
有没有办法在输出之前自动将每个Carbon实例的时区格式化为给定的一个,或者我是否必须遍历集合并相应地设置每个实例?
设置app.timezone不起作用,因为它还导致Carbon实例在app.timezone时区中保存到数据库,而数据库中的所有日期都应该是UTC,因此我失去了一致性.
我目前app.timezone在App配置中设置为UTC,但我还被迫在输出之前将所有Carbon实例转换为正确的时区.有没有更好的方法,可能是在将Carbon变成字符串并在那里进行之前捕获执行?
编辑:
我试过的事情:
覆盖setAttribute和getAttribute:
public function setAttribute($property, $value) {
if ($value instanceof Carbon) {
$value->timezone = 'UTC';
}
parent::setAttribute($property, $value);
}
public function getAttribute($key) {
$stuff = parent::getAttribute($key);
if ($stuff instanceof Carbon) {
$stuff->timezone = Helper::fetchUserTimezone();
}
return $stuff;
}
Run Code Online (Sandbox Code Playgroud)
覆盖asDateTime:
protected function asDateTime($value)
{
// If this value is an integer, we will assume it is a UNIX timestamp's …Run Code Online (Sandbox Code Playgroud) Carbon提供函数weekOfYear以将一年中的星期作为整数.但是,我需要反过来根据年份+一周的时间来获取日期.
Carbon::now()->weekOfYear(); // todays week of the year
Run Code Online (Sandbox Code Playgroud)
例如
因此,我需要这周的开始和结束日期.但是我在Carbon文档中找不到合适的函数
我有日期时间字符串: 2016-11-01 15:04:19
如何分隔日期和时间?
我想找出不同时区2次之间的差异。我的服务器基于悉尼,我想找到给定时间与当前时间(基于珀斯)之间的时差(以秒为单位)
echo $tz = Carbon::now('Australia/Perth');
echo "<br>";
$local='2017-04-11 12:39:50';
echo $emitted = Carbon::parse($local);
echo "<br>";
echo "diff from carbon->";
echo $diff = $tz->diffInSeconds($emitted);
echo "<br> diff from Normal->";
echo $diff1 = strtotime($tz) - strtotime($emitted);
Run Code Online (Sandbox Code Playgroud)
当我使用diffInSeconds它时,相差2小时,看起来本地化没有考虑,但strtotime($tz) - strtotime($emitted)给出了理想的结果。我错过了什么吗?
我正在构建一个小应用程序,Laravel 5.4 我正试图从前端接收来自datepicker小部件的日期并将其解析为Carbon日期格式,如下所示:
Carbon\Carbon::parse($request->schedule)->toDateTimeString();
Run Code Online (Sandbox Code Playgroud)
继续我之前的问题:如何通过laravel中的Vuejs Datepicker格式化日期接收,我成功地将其添加到我的数据库中,并且在调用它时我在我的模型中放置一个访问器并尝试以diffForHumans()格式获取日期前面的问题:一个两位数一个月找不到在Laravel数据丢失,这个作品每当我取模型完全正常的,直到在获取车型在控制器我不分配这个计划属性为任何其他变量,现在并使用以下内容分配值:
public function getData()
{
$user = Auth::user();
$summaries = InteractionSummary::all();
$meetings = [];
foreach($summaries as $summary)
{
$company = [];
$tempData = $summary->interaction->where('user_id', $user->id)->get()->first();
if($tempData)
{
$meeting = Interaction::find($tempData->id);
$tempData->schedule = $meeting->schedule;
$meetings[] = $tempData;
}
}
return response()->json(['meetings' => $meetings], 200);
}
Run Code Online (Sandbox Code Playgroud)
我得到了同样的错误:
无法找到两位数月份数据缺失
如果我这样做,同样的工作完全正常:
public function getFutureData()
{
$user = Auth::user();
$currentTime = Carbon::now();
$interactions = $user->interaction->where('schedule', '>=', $currentTime);
$meetings = [];
foreach($interactions as $interaction) …Run Code Online (Sandbox Code Playgroud) 假设我有以下代码:
$now = Carbon::now();
$dateTimeObject = Carbon::parse('2017-07-20 10:16:34');
Run Code Online (Sandbox Code Playgroud)
我如何只diff在日期之间得到,忽略时间因素?
所以,如果$now是2017-07-27 09:11:12,那么日期$dateTimeObject是2017-07-20 - 差异就是7.
我需要它来确保特定操作的结果每天只存储在数据库中一次.
注意:
我试过diffInDays()的方法,但它返回0值的类型如2016-10-12 23:56:43和2016-10-13 02:01:53-所以,接近午夜晚上.
我正在尝试解析一个格式如下的日期:
2017-09-20T10:59:10.0000000 01:00
Run Code Online (Sandbox Code Playgroud)
我正在使用Carbon,所以我尝试了:
Carbon::createFromFormat('Y-m-dTH:i:s.u vP', $date)
Run Code Online (Sandbox Code Playgroud)
哪个输出:
The timezone could not be found in the database\n
Unexpected data found.\n
Data missing
Run Code Online (Sandbox Code Playgroud)
我猜最后一个时区参数可能是错误的,但我找不到如何解析该日期格式的方法:/
感谢帮助 !
我需要正确的下个月付款日期。因此,我要考虑最后的截止日期,并在其中加上一个月。我该怎么做?
我的例子是:上次付款是Januarry的31号,我在做
Carbon::create(2018, 1, 31, 0, 0, 0)->addMonthsNoOverflow(1)
Run Code Online (Sandbox Code Playgroud)
它可以正常工作,但是给定了,2018-02-28但是下一次付款将在28日再次到期。因此,我需要在添加一个月后设置一个日期。
Carbon::create(2018, 2, 28, 0, 0, 0)->addMonthsNoOverflow(1)->day(31)
Run Code Online (Sandbox Code Playgroud)
它给我2018-03-31带来的好处,但是如果我在第一个示例中使用此公式
Carbon::create(2018, 1, 31, 0, 0, 0)->addMonthsNoOverflow(1)->day(31)
Run Code Online (Sandbox Code Playgroud)
它给我溢出2018-03-03。这是我的问题。我该怎么办?有类似的东西->setDayNoOverflow(31)吗?
我正在尝试以人工格式获取两个日期之间的差异,但仅以工作日为单位。这是我的实际代码:
$start = '2018-09-13 09:30:00';
$end = '2018-10-16 16:30:00';
$from = Carbon::parse($start);
$to = Carbon::parse($end);
$weekDay = $from->diffInWeekdays($to);
$human = $to->diffForHumans($from, true, false, 6);
var_dump($weekDay); //24
var_dump($human); // 1 month 3 days 7 hours
Run Code Online (Sandbox Code Playgroud)
diffForHumans 非常适合我的需求,但是我找不到像 diffInDaysFiltered
我想达到的结果是:24 days 7 hours因为我们只有24工作日
我preg_replace第一次尝试用$weekDay结果替换3天,但是如果我们有一个月的时间不正确,我就会:1 month 24 days 7 hours
我的问题有什么解决办法吗?
这个时区的东西是一个真正的噩梦.我将所有值都存储在我的数据库中.我想要做的是构建一个在本地时区返回DateTime字符串的函数.当我使用Laravel时,我想用Carbon来完成工作.我现在多次尝试过但都失败了.
$dateasstring= '2014-01-05 12:00:00' //retrieved from databse
这个日期是UTC.如何将其作为UTC解析为Carbon,然后告诉Carbon将时间更改为localtimezone?我错过了什么吗?
php-carbon ×10
php ×9
laravel ×8
datetime ×3
date ×2
laravel-4 ×1
laravel-5.2 ×1
laravel-5.3 ×1
laravel-5.4 ×1