2016-09-03 3 views
1

im пытается найти День Виктории. Дата праздника: «С понедельника до 24 мая»Как я могу найти следующий строковый формат даты: «В понедельник или до 24 мая в году» через DateTime strtotime

im не в состоянии найти правильное форматирование, которое может принимать DateTime.

, когда я пытаюсь запустить этот код я получаю фатальную EROR:

Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct(): Failed to parse time string (Monday on or before May 24 2015) at position 7 (o): The timezone could not be found in the database

if ($GYear >= 1845) { 
       $VictoriaDay = new DateTime("Monday on or before May 24 $GYear", new DateTimeZone("UTC")); 
       $VictoriaDay_Day = $VictoriaDay->format('j'); 
       if ($GDay == VictoriaDay_Day) { 
        return "Victoria Day"; 
       } 
      } 

Любой suggestiion пожалуйста, как я могу получить эту дату с помощью DateTime? thianks!

ответ

-1

Вы можете попробовать это:

function victoria_day() { 
    $t = strtotime('May 25'); 
    return $t - (date("N")-1)*24*60*60; 
} 
1

Вы лучше с помощью функции \DateTime::modify(). Нечто подобное должно удовлетворить: -

function getVictoriaDay($year = null) 
{ 
    if(!$year){ 
     $year = (int)(new \DateTime())->format('Y'); 
    } 
    $victoriaDay = new \dateTime("$year-05-24"); 
    if($victoriaDay->format('D') !== 'Mon'){ 
     $victoriaDay->modify('previous monday'); 
    } 
    return $victoriaDay; 
} 

Demo

+0

thanks.that работал для меня! но после некоторой мысли ... я нахожу, что могу использовать предложение «$ victoriaDay = new DateTime (« предыдущий месяц $ GYear-05-25 », новый DateTimeZone (« UTC »)); « – codingnighter2000

+0

@ codingnighter2000 Я удивился, что работает, но [он делает!] (https://3v4l.org/abJfq). Отлично сработано :) – vascowhite