2015-03-18 4 views
-4

Я хотел бы знать, как я могу два datetime из MySQL разбивать на один диапазон. Я создаю систему событий, в которой мне нужно, чтобы пользователи вводили диапазон.Как я могу разделить два дня на один диапазон?

Вход:

date from: 2015-03-05 
date to: 2015-03-07 

Я хочу от этих две переменных получить это:

Выход:

Mar 5–7, 2015 

Если месяц и год разные

Diff. month: Mar 31 – Apr 2, 2015 
Diff. year: Dec 31 2014 – Jan 2, 2015 
+1

Это понятно для многих интерпретаций, что должно произойти, когда могут отличаться месяцы или годы? – jeroen

+0

Я добавил две интерпретации, что может случиться в моем случае. – Mardzis

+0

Хорошо, и где вы точно застряли, что у вас есть до сих пор? – jeroen

ответ

0

Это одно решение. вы можете уменьшить код хотя.

<?php 
    $dateFrom ="2014-03-05"; 
    $dateTo ="2015-04-07"; 

    $part1= ''; 
    $part2= ''; 

    if(date('M',strtotime($dateFrom)) == date('M' ,strtotime($dateTo))){ 
     $part1= date('M',strtotime($dateFrom)).' '.date('j',strtotime($dateFrom)); 
     $part2= date('j',strtotime($dateTo)); 
    } else { 
     $part1= date('M',strtotime($dateFrom)).' '.date('j',strtotime($dateFrom)); 
     $part2= date('M',strtotime($dateTo)).' '.date('j',strtotime($dateFrom)); 
    } 
    $stringFinal = $part1.' - '.$part2.', '; 

    if(date('Y',strtotime($dateFrom)) == date('Y' ,strtotime($dateTo))){ 
     $stringFinal = $part1.' - '.$part2.', '.' '.date('Y',strtotime($dateFrom)); 

    } else { 
     $stringFinal = $part1.' '.date('Y',strtotime($dateFrom)).' - '.$part2.', '.' '.date('Y',strtotime($dateTo)); 
    } 

    echo $stringFinal; 

?> 
0

Довольно более элегантное решение возможно с использованием DateTime классов и перемещая все в функции. Что-то вроде: -

/** 
* @param string $from 
* @param string $to 
* @return string 
*/ 
function dateDiffString($from, $to) 
{ 
    $fromDate = new \DateTime($from); 
    $toDate = new \DateTime($to); 
    if($fromDate->format('Y') !== $toDate->format('Y')){ 
     return $fromDate->format('M d Y') . " - " . $toDate->format('M d Y'); 
    } 
    if($fromDate->format('m') !== $toDate->format('m')){ 
     return $fromDate->format('M d') . ' - ' . $toDate->format('M d, Y'); 
    } 
    return $fromDate->format('M d') . ' - ' . $toDate->format('d, Y'); 
} 

Here is a working example используя ваши примеры ввода.

Смежные вопросы