2014-09-18 14 views
18

Potrzebuję użyć PHP DateTime, aby uzyskać pierwszy dzień bieżącego roku. Próbowałem:Jak zdobyć pierwszy dzień bieżącego roku?

$year = new DateTime('first day of this year'); 
var_dump($year); 

Ale to wydaje się być powrót pierwszego dnia bieżącego miesiąca: 2014-09-01 09:28:56

Dlaczego? Jak poprawnie uzyskać pierwszy dzień bieżącego roku?

+9

Czy rozwiązanie '$ year = new DateTime (" pierwszy dzień stycznia ");' nie jest OK? –

+3

Co więcej, to powinno działać również "new \ DateTime (" pierwszy dzień stycznia tego roku ")' lub 'new \ DateTime (" ostatni dzień grudnia przyszłego roku ")' na przykład ... – Tecnocat

Odpowiedz

20
echo date('l',strtotime(date('Y-01-01'))); 
8

można uzyskać bieżącą datę, a następnie ustawić dni i miesięcy do 1:

$year = new DateTime(); 
$year->setDate($year->format('Y'), 1, 1); 

Opcjonalnie można ustawić czas do północy:

$year->setTime(0, 0, 0); 
1

Spójrz na ten link - http://davidhancock.co/2013/11/get-the-firstlast-day-of-a-week-month-quarter-or-year-in-php/

function firstDayOf($period, DateTime $date = null) 
{ 
    $period = strtolower($period); 
    $validPeriods = array('year', 'quarter', 'month', 'week'); 

    if (! in_array($period, $validPeriods)) 
     throw new InvalidArgumentException('Period must be one of: ' . implode(', ', $validPeriods)); 

    $newDate = ($date === null) ? new DateTime() : clone $date; 

    switch ($period) { 
     case 'year': 
      $newDate->modify('first day of january ' . $newDate->format('Y')); 
      break; 
     case 'quarter': 
      $month = $newDate->format('n') ; 

      if ($month < 4) { 
       $newDate->modify('first day of january ' . $newDate->format('Y')); 
      } elseif ($month > 3 && $month < 7) { 
       $newDate->modify('first day of april ' . $newDate->format('Y')); 
      } elseif ($month > 6 && $month < 10) { 
       $newDate->modify('first day of july ' . $newDate->format('Y')); 
      } elseif ($month > 9) { 
       $newDate->modify('first day of october ' . $newDate->format('Y')); 
      } 
      break; 
     case 'month': 
      $newDate->modify('first day of this month'); 
      break; 
     case 'week': 
      $newDate->modify(($newDate->format('w') === '0') ? 'monday last week' : 'monday this week'); 
      break; 
    } 

    return $newDate; 
} 
8

Jeśli chcesz dostać pierwszy dzień bieżącego roku prostu użyć tego kodu

echo date("l", strtotime('first day of January '.date('Y'))); 
21

Twoja data względny Format 'first day of this year' jest poprawna wracając pierwszy dzień miesiąca z powodu definicji first day of:

Zestawy dzień pierwszego miesiąca bieżącego. Ta fraza jest najlepsza używana wraz z następującą po niej nazwą miesiąca. (See PHP-doc)

zdobyć pierwszy dzień bieżącego roku ze względnym formacie można użyć coś takiego:

'first day of January ' . date('Y') 
+7

lub lepiej: strtotime (' pierwszy dzień stycznia tego roku ") –

1

w PHP 5.3.10 to działa

$myDate = new \DateTime(date("Y")."-01-01");                                           
echo $myDate->format("Y-m-d"); 

W PHP 5.4 i wyższym można umieścić wszystkie razem

echo (new \DateTime(date("Y")."-01-01"))->format("Y-m-d") 
2

Spróbuj tego:

date('Y-m-d', strtotime('first day of january this year')); 
1

Jako komentator @ Glavic powiedział już

$year = new DateTime('first day of January');

jest rozwiązaniem.

Dla mnie sensownie semantycznie, że "w tym roku" powinien powrócić o północy pierwszego dnia roku, ale tak naprawdę nie jest!

Powiązane problemy