StrToTime;выбор определенных дней;и четверг (сегодня) не работает - PullRequest
1 голос
/ 01 декабря 2011

Я подумал, что у меня это отлично работает, а потом понял, что сегодня особый месяц, когда он усложняется.

Вот что у меня есть:

<!-- determines first Wednesday and first Thursday of the month to echo something different than the rest of the days of the month. -->
<?php
$firstwed = strtotime("first Wednesday, first Thursday". date("F Y"));
$now = strtotime('today'); 

if( $firstwed == $now) {
  echo "Registration is closed until our next event!";
  // do something
} else {
  echo 'REGISTER AND PAY ONLINE HERE';
  // do something else
}
?>

Но мне это тоже нужно былоцель вчера (среда, но это случилось в прошлом месяце).

И это даже не сработает, если я просто выберу цель сегодня (четверг). ??

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

Пожалуйста, помогите и большое вам спасибо!

* РЕДАКТИРОВАТЬ: Может ли кто-нибудь еще помочь в этом вопросе?Я до сих пор не достиг никакого прогресса.

Ответы [ 2 ]

1 голос
/ 01 декабря 2011

Ваша версия фактически сравнивает ВТОРОЙ четверг:

php > echo date('c', strtotime('first wednesday, first thursday'));
2011-12-08T00:00:00-06:00   <--- dec 8th = thursday, but not **THE** first thursday
php > echo date('c', strtotime('first wednesday'));
2011-12-07T00:00:00-06:00   <--- dec 7th = wednesday
php > echo date('c', strtotime('today'));
2011-12-01T00:00:00-06:00   <-- dec 1st = thursday <-- actual first thursday of the emonth

strtotime довольно хорошо угадывает, что вы хотите, но это не безошибочно, и это один из случаев, когда он взрывается у вас на лице. Он находит «первый четверг», который происходит ПОСЛЕ сегодняшнего дня, а не первого четверга месяца.

php > echo date('c', strtotime('first thursday december'));
2011-12-08T00:00:00-06:00
php > echo date('c', strtotime('thursday december'));
2011-12-01T00:00:00-06:00
php > echo date('c', strtotime('thursday'));
2011-12-01T00:00:00-06:00

Не особо интуитивно понятен.

Вам было бы лучше использовать формальные вызовы DateTime, чтобы получить "день недели" фактического первого дня текущего месяца и посмотреть, является ли это среда / четверг.

1 голос
/ 01 декабря 2011

Ваш вопрос трудно понять,
если я правильно понимаю,
вот улучшенная версия с некоторым упрощением: -

$today = explode(',', date('d,D,t'));  // month day, week day, days in month
switch ($today[1])
{
  case "Wed":
    if (($today[0]+2 > $today[2]) || $today[0] <=7)
    {
      //closed
    }
  case "Thu":
    if (($today[0]+1 > $today[2]) || $today[0] <=7)
    {
      //closed
    }
    break;
}

Потому что, несмотря ни на что, день месяца для первых ср / чт никогда не будет превышать 7 * 1006

...