标签: php-carbon

Laravel/Carbon中的多次时间化

我想知道这是否可行,所以让我说我有一个这样的模型:

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)

php datetime laravel php-carbon

5
推荐指数
2
解决办法
2200
查看次数

碳:了解一年中一年中的一周的开始和结束日期

Carbon提供函数weekOfYear以将一年中的星期作为整数.但是,我需要反过来根据年份+一周的时间来获取日期.

Carbon::now()->weekOfYear(); // todays week of the year
Run Code Online (Sandbox Code Playgroud)

例如

  • 年:2016年
  • 一年中的一周:42

因此,我需要这周的开始和结束日期.但是我在Carbon文档中找不到合适的函数

php date php-carbon

5
推荐指数
1
解决办法
1万
查看次数

如何使用Laravel在日期和时间上解析日期时间?

我有日期时间字符串: 2016-11-01 15:04:19

如何分隔日期和时间?

php laravel php-carbon laravel-5.2 laravel-5.3

5
推荐指数
4
解决办法
1万
查看次数

基于时区的碳上数秒之间的差值

我想找出不同时区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)给出了理想的结果。我错过了什么吗?

php datetime laravel php-carbon

5
推荐指数
1
解决办法
8401
查看次数

无法找到两位数的月份Laravel的Carbon缺少数据

我正在构建一个小应用程序,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)

php laravel php-carbon laravel-5.4

5
推荐指数
1
解决办法
2796
查看次数

碳:仅按日期区分两个日期时间对象

假设我有以下代码:

$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:432016-10-13 02:01:53-所以,接近午夜晚上.

php laravel php-carbon

5
推荐指数
1
解决办法
4267
查看次数

碳解析日期格式

我正在尝试解析一个格式如下的日期:

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)

我猜最后一个时区参数可能是错误的,但我找不到如何解析该日期格式的方法:/

感谢帮助 !

php datetime date laravel php-carbon

5
推荐指数
1
解决办法
6931
查看次数

设置下个月的付款日期(使用PHP Carbon)

我需要正确的下个月付款日期。因此,我要考虑最后的截止日期,并在其中加上一个月。我该怎么做?

我的例子是:上次付款是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)吗?

php laravel php-carbon

5
推荐指数
1
解决办法
2426
查看次数

PHP Carbon日期差异仅工作日

我正在尝试以人工格式获取两个日期之间的差异,但仅以工作日为单位。这是我的实际代码:

$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

我的问题有什么解决办法吗?

php php-carbon

5
推荐指数
1
解决办法
1257
查看次数

解析从mysql到carbon对象的日期,然后转换为本地时区

这个时区的东西是一个真正的噩梦.我将所有值都存储在我的数据库中.我想要做的是构建一个在本地时区返回DateTime字符串的函数.当我使用Laravel时,我想用Carbon来完成工作.我现在多次尝试过但都失败了.

$dateasstring= '2014-01-05 12:00:00' //retrieved from databse

这个日期是UTC.如何将其作为UTC解析为Carbon,然后告诉Carbon将时间更改为localtimezone?我错过了什么吗?

laravel laravel-4 php-carbon

4
推荐指数
1
解决办法
1万
查看次数