اذهب إلى المحتوى
  • 0

كيفية حساب الفرق بين تاريخين بالدقائق في PHP؟

Emad Saif

السؤال

لدي متغيرين يحمل كلًا منهما تاربخ معين (في شكل نص string):

$date1 = '2022-03-25 14:21:36';
$date2 = '2022-03-26 10:15:48';

كيف أحسب عدد الدقائق (أو الثواني) بين المتغيرين في PHP؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

تقوم بتحويل المُتغيرين من سلاسل نصية إلى كائنات DateTime ثم تستخدم التابع diff لحساب الفرق:

<?php
// Enter your code here, enjoy!
$date1 = '2022-03-25 14:21:36';
$date2 = '2022-03-26 10:15:48';

$start_date = new DateTime($date1);
$since_start = $start_date->diff(new DateTime($date2));

سيكون الناتج عبارة عن كائن من الصنف DateInterval من خلاله تستطيع الوصول لعدة خاصيات تُساعدك في تحويل الفرق إلى دقائق أو ساعات أو ثواني ...

<?php

$date1 = '2022-03-25 14:21:36';
$date2 = '2022-03-26 10:15:48';

$start_date = new DateTime($date1);
$since_start = $start_date->diff(new DateTime($date2));

echo $since_start->days.' days total<br>';
echo $since_start->y.' years<br>';
echo $since_start->h.' hours<br>';
echo $since_start->i.' minutes<br>';
echo $since_start->s.' seconds<br>';

سيكون الخرج:

0 days total
0 years
19 hours
54 minutes
12 seconds

لحساب الفرق بالدقائق فقط نُحول ناتج الأيام إلى دقائق و نُضيف له ناتج تحويل الساعات إلى دقائق و نضيف له الدقائق كما يلي:

<?php


$date1 = '2022-03-25 14:21:36';
$date2 = '2022-03-26 10:15:48';

$start_date = new DateTime($date1);
$since_start = $start_date->diff(new DateTime($date2));

$minutes = $since_start->days * 24 * 60;
$minutes += $since_start->h * 60;
$minutes += $since_start->i;
echo $minutes.' minutes'; // 1194 minutes

أما إن كنت تستخدم مكتبة Carbon فهي تُوفر عدة توابع للتعامل مع التواريخ و الوقت من بينها حساب الفرق بأي وحدة ترغب:

<?php


$date1 = '2022-03-25 14:21:36';
$date2 = '2022-03-26 10:15:48';

$startTime = \Carbon\Carbon::parse($date1);
$finishTime = \Carbon\Carbon::parse($date2);

echo $finishTime->diffInHours($startTime) . "<br>"; // 19
echo $finishTime->diffInMinutes($startTime) . "<br>"; // 1194
echo $finishTime->diffInSeconds($startTime) . "<br>"; // 71652
echo $finishTime->diffInSeconds($startTime) . "<br>"; // 71652

$finishTime->diffForHumans($startTime); // 19 hours after
$startTime->diffForHumans($finishTime); // 19 hours before


\Carbon\Carbon::setLocale('ar');
$startTime->diffForHumans($finishTime); // قبل 19 ساعة
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

يمكنك استعمال أحد توابع الكائن DateTime في PHP لعمل الفكرة، يجب أولا تمرير التاريخين الى الباني كالتالي: 

$first_date = new DateTime('2022-03-25 14:21:36');
$second_date = new DateTime('2022-03-26 10:15:48');

ثم سيمكن عن طريق التابع diff استخلاص الفرق بين التاريخين كالتالي: 

$difference = $first_date->diff($second_date);

سيبدوا خرج النتيجة كائن DateInterval يبدوا كالتالي: 

object(DateInterval)
  public 'y' => int 0
  public 'm' => int 0
  public 'd' => int 20
  public 'h' => int 6
  public 'i' => int 56
  public 's' => int 30
  public 'invert' => int 0
  public 'days' => int 20

واستخلاص الدقيقة من الخرج بشكل بسيط عن طريق قراءة الخاصية i: 

echo $difference->i;

في حالة تجاوز الفرق لدقائق ستحتاج تحويل الساعات او الثواني او الايام الى دقائق هي الأخرى لحسابها ضمن الفرق.

تعرف أكثر عن التعامل مع الوقت والتاريخ في PHP.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...