2014-07-21 5 views
-3

Я работаю над задачей, когда мне нужно преобразовать заданное целое значение, которое общее количество месяцев в год, месяцы, недели и дниПреобразовать в годы, месяцы, недели и дни

Например, если данное значение равно 62 месяцам, тогда я должен был бы принять это число и преобразовать его в x years x months x weeks and x days

Я могу найти несколько примеров в Интернете, которые занимают 2 даты и дают требуемый результат, но мое требование - взять число и преобразовать это в годы, месяцы, недели, дни.

Я буду очень признателен, если кто-то может указать мне в правильном направлении.

+0

без ссылки даты, это невозможно знать, сколько недель и дней определенное количество месяцев, потому что количество дней в месяце не согласуется. Вам нужно четко указать, как вы хотите, чтобы цифры были рассчитаны. –

ответ

5

Невозможно получить абсолютно точный результат, учитывая, что не все месяцы равны. Не зная, какие месяцы и от которых лет, ближе вы можете получить приближение, используя простую математику:

$months = 62; 

$days = $months*30; //or 28 or 31 or 29(leap year) 
$weeks = $months*4; //or $days/7; 
$years = $months/12; //or floor($months/12) . ' years and ' . $months%12 . ' months' 

See demo

+0

Спасибо, я думаю, что это может быть то, что я ищу, скоро вернусь к вам. – Baig

+0

Примечание: я бы основывал недели на количестве дней/7, если вы хотите что-то вроде последовательных результатов ... :) – deceze

+0

это близко к тому, что мне нужно, результат должен быть 5 лет и 1 месяц и х дней, потому что это то, что равно «62» месяцам – Baig

5

«месяц» что-нибудь от 28 до 31 дней. Он не может быть четко разделен на определенное количество дней или недель, потому что для начала это двусмысленный промежуток времени. Если бы вы знали точную дату начала и четкую спецификацию «месяц», вы могли бы получить результат. Но просто «62 месяца» само по себе невозможно конвертировать без особого разъяснения.

+0

позволяет предположить, что каждый месяц составляет 31 день, то как это можно достичь? – Baig

+0

Простое умножение и деление. – deceze

+0

Простое умножение близко к тому, что мне нужно, но не совсем то, что мне нужно. Предположим, что месяц «52», что я ищу, так как он имеет 4 года, 4 месяца, так как это «52» месяцев. – Baig

2

вы можете использовать php, встроенный в функции DateTime, strtotime действительно получить результаты, которые вы ищете в хорошем чистом формате.

http://php.net/manual/de/datetime.diff.php

http://de1.php.net/manual/de/function.strtotime.php

$months = 62; 
$dateTime = new DateTime(); 
$newDateTime = $dateTime->diff(
    new DateTime(date("Y-m-d H:i:s", strtotime(sprintf('-%s Months', $months)))) 
); 

print_R($newDateTime); 
DateInterval Object 
(
    [y] => 5 
    [m] => 2 
    [d] => 0 
    [h] => 0 
    [i] => 0 
    [s] => 0 
    [weekday] => 0 
    [weekday_behavior] => 0 
    [first_last_day_of] => 0 
    [invert] => 1 
    [days] => 1887 
    [special_type] => 0 
    [special_amount] => 0 
    [have_weekday_relative] => 0 
    [have_special_relative] => 0 
) 
+0

Вы можете учитывать дату, как указано в вопросе, у меня есть только одно целое число, с которым работает 'month' – Baig

+0

i обновил мой код – ins0

+0

Я изучаю его и вернусь к вам – Baig

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