PHP Carbon本月的第n天

时间:2018-01-19 21:49:33

标签: php laravel php-carbon

2018年1月19日是本月的第三个星期五。

我希望数字3表示这是第三个星期五。 Carbon可以这样做吗?

此外,我将使用它来检查另一个日期是否在另一个月的第三个星期五之前或之后。例如,是在二月的第三个星期五之前或之后的2018年2月17日?

2 个答案:

答案 0 :(得分:1)

Carbon是PHP类DateTime之上的一个层,它非常强大,因为它支持许多概述here的格式,特别是你正在寻找Relative Formats

Third friday of february是有效的相对格式,因此,您可以执行以下操作:

Carbon::parse('February 17th') > Carbon::parse('third friday of february');

这将产生true,而:

Carbon::parse('February 15th') > Carbon::parse('third friday of february');

将产生false

在构建这种方式时,您需要注意格式化非常重要,例如,third friday in february无效。

我不相信DateTime类中的任何功能允许单个DateTime格式的第一部分,但是,您可以使用以下内容:

  1. 确定提供日期的日期
  2. 查找当月的第一天
  3. 比较您的日期和第一天之间的天数/天数
  4. e.g:

    $date = Carbon\Carbon::parse('January 18 2018');
    
    $firstDay = Carbon\Carbon::parse("first {$date->format('l')} of {$date->format('F')}");
    $nth = $firstDay->diffInDays($date) / 7 + 1;
    
    echo "{$date->format('Y-m-d')} is the #{$nth} {$date->format('l')} in this month";
    

答案 1 :(得分:0)

显然它可以。

编辑:忽略此

我不认为Carbon可以完全按照您的要求直接进行,但使用内置的getter进行一些计算我确信您可以轻松实现这一点。

http://carbon.nesbot.com/docs/#api-getters

从解析日期开始:

$dt = Carbon::parse('2018-19-1 23:26:11.123789');

然后使用weekOfMonthdayOfMonthdayOfWeek