{"id":177,"date":"2020-12-31T00:03:36","date_gmt":"2020-12-31T00:03:36","guid":{"rendered":"http:\/\/jplatz.com.br\/syntax\/?p=177"},"modified":"2020-12-31T00:11:51","modified_gmt":"2020-12-31T00:11:51","slug":"php-datetime-diff-calculando-diferenca-de-dias-entre-datas","status":"publish","type":"post","link":"https:\/\/jplatz.com.br\/syntax\/2020\/12\/31\/php-datetime-diff-calculando-diferenca-de-dias-entre-datas\/","title":{"rendered":"PHP DateTime Diff Calculando diferen\u00e7a de dias entre datas"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>function calculateDiffInDays(string $date1, string $date2) {\n  $datetime1 = new \\DateTime($date1);\n  $datetime2 = new \\DateTime($date2);\n  \n  return $datetime1->diff($datetime2)->days;\n}\n\necho calculateDiffInDays('1970-08-25', '2020-12-30');\n\/\/ 18390\necho calculateDiffInDays('2020-12-30', '1970-08-25');\n\/\/ 18390<\/code><\/pre>\n\n\n\n<p>Recentemente precisei ajustar um processo que j\u00e1 fazia um c\u00e1lculo de diferen\u00e7a de dias entre datas e me deparei com um c\u00f3digo bem similar a este, s\u00f3 que n\u00e3o funcionava.<\/p>\n\n\n\n<p>Da\u00ed fui pesquisar a boa e velha documenta\u00e7\u00e3o do PHP e encontrei a falha. <\/p>\n\n\n\n<p>Primeiro vamos esclarecer que o DateTime::diff retornar um DateInterval o qual ent\u00e3o pode ser formatado de v\u00e1rias formas&#8230; <a href=\"https:\/\/www.php.net\/manual\/en\/class.dateinterval.php\">https:\/\/www.php.net\/manual\/en\/class.dateinterval.php<\/a><\/p>\n\n\n\n<p>Observe que <strong>days<\/strong> representa o total de n\u00famero de dias entre a primeira e segunda datas e isso significa dizer que o resultado ser\u00e1 um n\u00famero inteiro.<\/p>\n\n\n\n<p>Enquanto isso <strong>d<\/strong> representa simplesmente um poss\u00edvel dia, ou seja, ser\u00e1 um n\u00famero entre 0 e 30 pois o c\u00e1lculo \u00e9 feito levando em conta apenas a por\u00e7\u00e3o dia. Assim a hip\u00f3tese para o maior resultado seria o dia 31 menos o dia 01 sendo o resultado 30.<\/p>\n\n\n\n<p>Ent\u00e3o, o c\u00f3digo original com o qual me deparei formatava o resultado usando a tag <strong>->d<\/strong> quando na verdade deveria estar utilizando <strong>->days<\/strong> para obter a diferen\u00e7a total de dias.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>return $datetime1->diff($datetime2)->d;<\/code><\/pre>\n\n\n\n<p>Confesso que apenas lendo a documenta\u00e7\u00e3o fica dif\u00edcil de ter certeza do resultado assim de imediato. Como sempre com PHP um teste r\u00e1pido \u00e9 o seu melhor aliado. <\/p>\n\n\n\n<p>Mas todos n\u00f3s sabemos que o PHP faz o que \u00e9 preciso fazer ou faz o que a gente quer que ele fa\u00e7a, n\u00e3o importa. <\/p>\n\n\n\n<p>O que algumas pessoas costumam usar para criticar o PHP, na verdade \u00e9 o que eu mais gosto nele!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Recentemente precisei ajustar um processo que j\u00e1 fazia um c\u00e1lculo de diferen\u00e7a de dias entre datas e me deparei com um c\u00f3digo bem similar a este, s\u00f3 que n\u00e3o funcionava. Da\u00ed fui pesquisar a boa e velha documenta\u00e7\u00e3o do PHP e encontrei a falha. Primeiro vamos esclarecer que o DateTime::diff retornar um DateInterval o qual [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26,2,3],"tags":[75,82],"class_list":["post-177","post","type-post","status-publish","format-standard","hentry","category-backend","category-coding","category-php","tag-datetime","tag-diff"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/177","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/comments?post=177"}],"version-history":[{"count":3,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/177\/revisions"}],"predecessor-version":[{"id":182,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/177\/revisions\/182"}],"wp:attachment":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/media?parent=177"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/categories?post=177"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/tags?post=177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}