3v4l.org

run code in 300+ PHP versions simultaneously
<?php $start = new DateTime('2017-07-11'); $end = new DateTime('2017-08-03'); $diff = $start->diff($end); $differenceInDays = ($diff->format('%m') * 30) + $diff->format('%d'); // caso houver uma diferença menor de um mês, // deve-se verificar se não passou pelo dia 31 if ($diff->format('%m') == 0) { //cria o trigésimo primeiro dia do mês inicial $thiryFirstDayOfStartMonth = $start->format('Y-m-31'); // Cria o objeto DateTime do trigésimo primeiro dia do mês inicial // Aqui está o "truque", caso o mês possuir apenas 30 dias, // como o caso de novembro, a data 31/11/2017 será transformada em 01/12/2017 // é um comportamento padrão da biblioteca $thirtyFirstDay = DateTime::createFromFormat('Y-m-d' , $thiryFirstDayOfStartMonth); //O trigésimo primeiro dia precisa ser menor que a data final do cálculo. if ($thirtyFirstDay < $end) { //Se data criada for realmente dia 31 do mês, deve-se if ($thirtyFirstDay->format('Y-m-d') == $thiryFirstDayOfStartMonth) { $differenceInDays--; } } } var_dump($differenceInDays);
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 26, Position 2 = 43
Branch analysis from position: 26
2 jumps found. (Code = 43) Position 1 = 37, Position 2 = 43
Branch analysis from position: 37
2 jumps found. (Code = 43) Position 1 = 42, Position 2 = 43
Branch analysis from position: 42
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 43
Branch analysis from position: 43
Branch analysis from position: 43
filename:       /in/gOPu9
function name:  (null)
number of ops:  47
compiled vars:  !0 = $start, !1 = $end, !2 = $diff, !3 = $differenceInDays, !4 = $thiryFirstDayOfStartMonth, !5 = $thirtyFirstDay
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   NEW                                              $6      'DateTime'
          1        SEND_VAL_EX                                              '2017-07-11'
          2        DO_FCALL                                      0          
          3        ASSIGN                                                   !0, $6
    4     4        NEW                                              $9      'DateTime'
          5        SEND_VAL_EX                                              '2017-08-03'
          6        DO_FCALL                                      0          
          7        ASSIGN                                                   !1, $9
    5     8        INIT_METHOD_CALL                                         !0, 'diff'
          9        SEND_VAR_EX                                              !1
         10        DO_FCALL                                      0  $12     
         11        ASSIGN                                                   !2, $12
    7    12        INIT_METHOD_CALL                                         !2, 'format'
         13        SEND_VAL_EX                                              '%25m'
         14        DO_FCALL                                      0  $14     
         15        MUL                                              ~15     $14, 30
         16        INIT_METHOD_CALL                                         !2, 'format'
         17        SEND_VAL_EX                                              '%25d'
         18        DO_FCALL                                      0  $16     
         19        ADD                                              ~17     ~15, $16
         20        ASSIGN                                                   !3, ~17
   11    21        INIT_METHOD_CALL                                         !2, 'format'
         22        SEND_VAL_EX                                              '%25m'
         23        DO_FCALL                                      0  $19     
         24        IS_EQUAL                                                 $19, 0
         25      > JMPZ                                                     ~20, ->43
   14    26    >   INIT_METHOD_CALL                                         !0, 'format'
         27        SEND_VAL_EX                                              'Y-m-31'
         28        DO_FCALL                                      0  $21     
         29        ASSIGN                                                   !4, $21
   20    30        INIT_STATIC_METHOD_CALL                                  'DateTime', 'createFromFormat'
         31        SEND_VAL                                                 'Y-m-d'
         32        SEND_VAR                                                 !4
         33        DO_FCALL                                      0  $23     
         34        ASSIGN                                                   !5, $23
   23    35        IS_SMALLER                                               !5, !1
         36      > JMPZ                                                     ~25, ->43
   26    37    >   INIT_METHOD_CALL                                         !5, 'format'
         38        SEND_VAL_EX                                              'Y-m-d'
         39        DO_FCALL                                      0  $26     
         40        IS_EQUAL                                                 !4, $26
         41      > JMPZ                                                     ~27, ->43
   28    42    >   PRE_DEC                                                  !3
   33    43    >   INIT_FCALL                                               'var_dump'
         44        SEND_VAR                                                 !3
         45        DO_ICALL                                                 
         46      > RETURN                                                   1

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
128.49 ms | 1405 KiB | 15 Q