2014-01-08 2 views
3

Функция first_tuesday() должна возвращать дату первого вторника года, но особенно в случае 2011 года она возвращает неправильное значение. как исправить код, чтобы он работает во всех случаяхПервый вторник PHP

function first_tuesday($year){ 

    $first_january = mktime(0,0,0,1,1,$year); 
    $day_week = date("w",$first_january); 
    $first_tuesday = $first_jan + ((2 - $day_week) % 7)* 86400; 
    return date("d/m/Y",$first_tuesday); 
} 
+1

Можете ли вы написать имена переменных на английском языке, чтобы нам было легче понять, что вы пытаетесь сделать? –

+0

сделано. отредактировал его на английском извините за это – user3172273

+0

Пожалуйста, не забудьте принять ответ, нажав на галочку рядом с одним из ответов, если вы нашли решение своей проблемы здесь. –

ответ

4

Используйте DateTime класс вместо:.

function first_tuesday($year){ 
    $day = new DateTime(sprintf("First Tuesday of January %s", $year)); 
    return $day->format('d/m/Y'); 
} 

Использование:

echo first_tuesday(2011); 

Выход:

04/01/2011 
+1

Вероятно, вы использовали 'return' вместо' echo' в своей функции. :) –

+0

@ rink.attendant.6: Вправо. Исправлено, спасибо! –

+0

Кстати, проверьте этот код $ exclus = array (1,4); функция hasard() { \t $ resultat = rand (1,10); \t return $ resultat; } echo "Nombre au hasard:" .hasard(). "\ N"; – user3172273

4

strtotime достаточно умен, чтобы получить то, что вы хотите:

function first_tuesday($year){ 
    return date('d/m/Y', strtotime("first Tuesday of January $year")); 
} 
+1

Нет, это не так. На моей машине (PHP 5.5.3) ваш код возвращает «07/01/2014» –

+0

Нет, это неверно. Ваша функция вернет '07/01/2014', но фактическое значение будет' 04/01/2011'. –

+1

07/01/2014 правильно? На 2014 год. – MattP

3

Это, кажется, работает для меня:

<?php 

$first_tuesday = new DateTime("first Tuesday of January 2011"); 
echo $first_tuesday->format('Y-m-d H:i:s'); 

?> 

Ввод в функциональной форме:

<?php 

/** 
* @return DateTime Returns a DateTime object representing the 
*     first Tuesday of the year 
*/ 
function first_tuesday($year){ 
    $first_tuesday = new DateTime("first Tuesday of January $year"); 
    return $first_tuesday; 
} 

?> 

Если вы хотите строку в вашем формате, то:

<?php 

/** 
* @return DateTime Returns a string representing the first 
*     Tuesday of the year in the d/m/Y format 
*/ 
function first_tuesday($year){ 
    $first_tuesday = new DateTime("first Tuesday of January $year"); 
    return $first_tuesday->format('d/m/Y'); 
} 

?> 

Вы можете прочитать больше о DateTime класса в PHP руководстве (которая также доступна на французском языке, как кажется, ваш родной язык, основанный по первоначальному вопросу)

+0

+1 для правильного подхода! –

0
$start_of_year = strtotime("01.01.2011"); 
$first_tuesday = strtotime("tuesday", $start_of_year); 

echo date('d.m.Y', $first_tuesday); // 04.01.2011 
0

Простой:

function first_tuesday($year) 
{ 
    return date("d/m/Y",strtotime('first Tuesday january '.$year)); 
} 

Нет необходимости использовать объекты, это самый быстрый способ получить его.

+1

wow great ,, that works perf – user3172273

+1

'Самый быстрый' - не имеющий отношения. Вы используете DateTime не потому, что это быстро, а потому, что оно * лучше *. –

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