2015-07-05 7 views
1

Я хочу две разницы между датами в число дней в php. Ниже приведен код, который отлично работает для остальной части данной даты, кроме 32 дней. Я знаю по-английски, нет 32 в днях, но я использую Непальскую дату для хранения в дБ. В календаре Непала также есть 32 дня, поэтому мне нужна помощь от кого-либо.PHP Разница дат двух заданных дат

$dStart = new DateTime('2071-02-32'); 
    $dEnd = new DateTime('2071-02-31'); 
    $dDiff = $dStart->diff($dEnd); 
    echo $dDiff->days; //output should come 1 
+0

Уже ответил тот же вопрос [Нажмите здесь] (http://stackoverflow.com/questions/676824/how-to-calculate-the-difference-between-two-dates-using-php) – varunsinghal

+1

@varunsinghal снова прочитал вопрос, и снова ! –

+0

Преобразование в gregorian дату. Запустите вычисление в php, а затем преобразуйте дату обратно в Непальский – Strawberry

ответ

3

Я думаю, вы, вероятно, уже используете конвертер (непальские даты на английский язык), чтобы справиться с ними. Если нет, то используйте этот один Nepali Date Convert

и вы можете просто конвертировать вам непальские даты на английский, прежде чем вычислить разницу, смотрите пример ниже:

$calendar = new Nepali_Calendar(); 
$date1 = $calendar->nep_to_eng('2071', '02', '32'); 
$date2 = $calendar->nep_to_eng('2071', '02', '31'); 

$dStart = DateTime::createFromFormat('Y-n-j', $date1['year'].'-'.$date1['month'].'-'.$date1['date']); 
$dEnd = DateTime::createFromFormat('Y-n-j', $date2['year'].'-'.$date2['month'].'-'.$date2['date']); 
$dDiff = $dStart->diff($dEnd); 
echo $dDiff->days; 
+0

На самом деле мне нужна разница между датами в количестве дней. Мне не нужен конвертер даты ... –

+0

Да, для этого вам тоже нужно использовать конвертер даты, поскольку php не понимает даты непала. –

+0

спасибо kamal pal, я получил решение. –

0

Ниже код работает отлично:

function diff($time1, $time2, $precision = 6) { 
    // If not numeric then convert texts to unix timestamps 
    if (! is_int ($time1)) { 
     $time1 = strtotime ($time1); 
    } 
    if (! is_int ($time2)) { 
     $time2 = strtotime ($time2); 
    } 

    // If time1 is bigger than time2 
    // Then swap time1 and time2 
    if ($time1 > $time2) { 
     $ttime = $time1; 
     $time1 = $time2; 
     $time2 = $ttime; 
    } 

    // Set up intervals and diffs arrays 
    $intervals = array (
      'year', 
      'month', 
      'day', 
      'hour', 
      'minute', 
      'second' 
    ); 
    $diffs = array(); 

    // Loop thru all intervals 
    foreach ($intervals as $interval) { 
     // Set default diff to 0 
     $diffs [$interval] = 0; 
     // Create temp time from time1 and interval 
     $ttime = strtotime ("+1 " . $interval, $time1); 
     // Loop until temp time is smaller than time2 
     while ($time2 >= $ttime) { 
      $time1 = $ttime; 
      $diffs [$interval] ++; 
      // Create new temp time from time1 and interval 
      $ttime = strtotime ("+1 " . $interval, $time1); 
     } 
    } 

    $count = 0; 
    $times = array(); 
    // Loop thru all diffs 
    foreach ($diffs as $interval => $value) { 
     // Break if we have needed precission 
     if ($count >= $precision) { 
      break; 
     } 
     // Add value and interval 
     // if value is bigger than 0 
     if ($value > 0) { 
      // Add s if value is not 1 
      if ($value != 1) { 
       $interval .= "s"; 
      } 
      // Add value and interval to times array 
      $times [] = $value . " " . $interval; 
      $count ++; 
     } 
    } 

    // Return string with times 
    return implode (", ", $times); 
} 

$startTime = '09-10-2017 10:30 AM'; 
$endTime = '19-10-2017 04:30PM'; 
// Run and print diff 
echo 'Span: '.diff ($startTime, $endTime, 6); 
Смежные вопросы