2010-01-20 2 views
1

Как напечатать все недели, которые начинаются с понедельника и заканчивается в воскресенье .. как ниже ..using Zend_dateКак напечатать все недели в год (или первого понедельника года)

1 04-Jan-2010-10-Jan-2010 
2 11-Jan-2010-17-Jan-2010 
3 18-Jan-2010-24-Jan-2010 
+0

$ firstMonday = date ('Y-m-d', strtotime ('first monday of'. Date ('Y'))); –

ответ

7

Начните поиск первого понедельника, затем вы можете просто добавить 1 неделю до года.

<?php 
define('NL', "\n"); 

$year   = 2010; 
$firstDayOfYear = mktime(0, 0, 0, 1, 1, $year); 
$nextMonday  = strtotime('monday', $firstDayOfYear); 
$nextSunday  = strtotime('sunday', $nextMonday); 

while (date('Y', $nextMonday) == $year) { 
    echo date('c', $nextMonday), '-', date('c', $nextSunday), NL; 

    $nextMonday = strtotime('+1 week', $nextMonday); 
    $nextSunday = strtotime('+1 week', $nextSunday); 
} 
+0

обратите внимание, что первый понедельник года не обязательно совпадает с понедельником недели ИСО 1. Неделя 1 считается неделей, которая удерживает первый день в году. так, например, неделя 1 2013 года начнется 31/12/2013. Если вы хотите включить это в свой расчет, сделайте что-то вроде этого: $ firstDayOfYear = mktime (0, 0, 0, 1, 1, $ year); $ first_thursday = strtotime ('thursday', $ firstDayOfYear); $ first_monday = strtotime (дата («Y-m-d», $ first_thursday). »- 3 дня»); –

+0

@Kevin: Спасибо, не знал об этом. Вы действительно правы: http://en.wikipedia.org/wiki/ISO_week_date#First_week Но поскольку я понимаю вопрос OP, он ищет полные недели в течение года. –

1

Получение первого понедельника год:

$year = 2010; 

$date = new Zend_Date(); 
$date->set("01.01.$year", Zend_Date::DATES); 

while(true) 
{ 
    if($date->equals('Mon', Zend_Date::MONTH_NAME_SHORT)) 
    { 
     //It's monday - print date 
     break; 
    } 
    else 
    { 
     //It's not monday - move to the next day 
     $date->add('1', Zend_Date::DAY_SHORT); 
    } 

} 

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

  • Нет связанных вопросов^_^