function getCalendarView($calendar) { $context = Model_Context::getInstance(); $current = $calendar['year'] . $calendar['month']; $previous = addPeriod($current, -1); $next = addPeriod($current, 1); $firstWeekday = date('w', mktime(0, 0, 0, $calendar['month'], 1, $calendar['year'])); $lastDay = date('t', mktime(0, 0, 0, $calendar['month'], 1, $calendar['year'])); $today = $current == Timestamp::get('Ym') ? Timestamp::get('j') : null; $currentMonthStr = fireEvent('ViewCalendarHead', Timestamp::format('%Y/%m', getTimeFromPeriod($current))); ob_start(); ?> <table class="tt-calendar" cellpadding="0" cellspacing="1" style="width: 100%; table-layout: fixed"> <caption class="cal_month"> <a href="<?php echo $context->getProperty('uri.blog'); ?> /archive/<?php echo $previous; ?> " title="<?php echo _text('1개월 앞의 달력을 보여줍니다.'); ?> ">«</a> <a href="<?php echo $context->getProperty('uri.blog'); ?> /archive/<?php echo $current; ?> " title="<?php echo _text('현재 달의 달력을 보여줍니다.'); ?> "><?php echo $currentMonthStr; ?> </a> <a href="<?php echo $context->getProperty('uri.blog'); ?> /archive/<?php echo $next; ?> " title="<?php echo _text('1개월 뒤의 달력을 보여줍니다.'); ?> ">»</a> </caption> <thead> <tr> <th class="cal_week2"><?php echo fireEvent('ViewCalendarHeadWeekday', _text('일요일')); ?> </th> <th class="cal_week1"><?php echo fireEvent('ViewCalendarHeadWeekday', _text('월요일')); ?> </th> <th class="cal_week1"><?php echo fireEvent('ViewCalendarHeadWeekday', _text('화요일')); ?> </th> <th class="cal_week1"><?php echo fireEvent('ViewCalendarHeadWeekday', _text('수요일')); ?> </th> <th class="cal_week1"><?php echo fireEvent('ViewCalendarHeadWeekday', _text('목요일')); ?> </th> <th class="cal_week1"><?php echo fireEvent('ViewCalendarHeadWeekday', _text('금요일')); ?> </th> <th class="cal_week1"><?php echo fireEvent('ViewCalendarHeadWeekday', _text('토요일')); ?> </th> </tr> </thead> <tbody> <?php $day = 0; $totalDays = $firstWeekday + $lastDay; $lastWeek = ceil($totalDays / 7); for ($week = 0; $week < $lastWeek; $week++) { // 주중에 현재 날짜가 포함되어 있으면 주를 현재 주 class(tt-current-week)를 부여한다. if ($today + $firstWeekday > $week * 7 && $today + $firstWeekday <= ($week + 1) * 7) { echo ' <tr class="cal_week cal_current_week">' . CRLF; } else { echo ' <tr class="cal_week">' . CRLF; } for ($weekday = 0; $weekday < 7; $weekday++) { $day++; $dayString = isset($calendar['days'][$day]) ? '<a class="cal_click" href="' . $context->getProperty('uri.blog') . '/archive/' . $current . ($day > 9 ? $day : "0{$day}") . '">' . $day . '</a>' : $day; // 일요일, 평일, 토요일별로 class를 부여한다. switch ($weekday) { case 0: $className = " cal_day cal_day_sunday"; break; case 1: case 2: case 3: case 4: case 5: case 6: $className = " cal_day"; break; } // 오늘에 현재 class(tt-current-day)를 부여한다. $className .= $day == $today ? " cal_day4" : " cal_day3"; if ($week == 0) { if ($weekday < $firstWeekday) { $day--; // 달의 첫째날이 되기 전의 빈 칸. echo ' <td class="cal_day1"> </td>' . CRLF; } else { echo ' <td class="' . $className . '">' . $dayString . '</td>' . CRLF; } } else { if ($week == $lastWeek - 1) { if ($day <= $lastDay) { echo ' <td class="' . $className . '">' . $dayString . '</td>' . CRLF; } else { // 달의 마지막날을 넘어간 날짜 빈 칸. echo ' <td class="cal_day2"> </td>' . CRLF; } } else { echo ' <td class="' . $className . '">' . $dayString . '</td>' . CRLF; } } } echo ' </tr>' . CRLF; if ($day >= $lastDay) { break; } } ?> </tbody> </table> <?php $view = ob_get_contents(); ob_end_clean(); return $view; }
<?php /** * Convert timestamps to different formats */ //TODO Validate that NTP conversion is correct require_once 'config.php'; require_once 'prop_Timestamp.php'; $ts = new Timestamp(1200685768); if (!empty($_POST['ts'])) { $ts->set($_POST['ts']); echo 'Unix timestamp (RFC 2822): ' . date('r', $ts->get()) . '<br/>'; echo 'NTP timestamp (RFC 2822): ' . date('r', $ts->getNTP()) . '<br/>'; echo '<br/>'; } ?> <form method="post" action=""> Timestamp: <input type="text" name="ts" size="15" value="<?php echo $ts->get(); ?> "/> <input type="submit" class="button" value="Convert"/> </form>
/** * 指定された時刻をタイムスタンプに変換します. * * このメソッドは、引数の Timestamp オブジェクトが持つ各フィールド * (年月日・時分秒) の値から {@link http://www.php.net/manual/function.mktime.php mktime()} * を行い, その結果を返り値とします. * * ただし, 返り値が string 型となることに注意してください. * * @param Timestamp $d 書式化対象の時間オブジェクト * @return string 指定された時刻のタイムスタンプ */ public function formatTimestamp(Timestamp $d) { $hour = $d->get('hour'); $min = $d->get('minute'); $sec = $d->get('second'); $month = $d->get('month'); $date = $d->get('date'); $year = $d->get('year'); return strval(mktime($hour, $min, $sec, $month, $date, $year)); }
function getCalendarView($period = null) { global $service, $database, $db; if ((empty($period) === true) || !TimePeriod::checkPeriod($period)) $period = Timestamp::getYearMonth(); $calendar = array('days' => array()); $calendar['period'] = $period; $calendar['year'] = substr($period, 0, 4); $calendar['month'] = substr($period, 4, 2); if ($db->query("SELECT DISTINCT DAYOFMONTH(FROM_UNIXTIME(written)) FROM {$database['prefix']}FeedItems WHERE YEAR(FROM_UNIXTIME(written)) = {$calendar['year']} AND MONTH(FROM_UNIXTIME(written)) = {$calendar['month']}")) { while (list($day) = $db->fetchArray()) array_push($calendar['days'], $day); } $calendar['days'] = array_flip($calendar['days']); $current = $calendar['year'] . $calendar['month']; $previous = TimePeriod::addPeriod($current, - 1); $next = TimePeriod::addPeriod($current, 1); $firstWeekday = date('w', mktime(0, 0, 0, $calendar['month'], 1, $calendar['year'])); $lastDay = date('t', mktime(0, 0, 0, $calendar['month'], 1, $calendar['year'])); $today = ($current == Timestamp::get('Ym') ? Timestamp::get('j') : null); $currentMonthStr = Timestamp::format('%Y.%m', TimePeriod::getTimeFromPeriod($current)); define('CRLF', "\r\n"); ob_start(); ?> <table class="calendar" cellpadding="0" cellspacing="1" style="width: 100%; table-layout: fixed"> <caption class="cal_month"> <?php echo $currentMonthStr;?> </caption> <thead> <tr> <th class="cal_week2"><?php echo _t('일요일');?></th> <th class="cal_week1"><?php echo _t('월요일');?></th> <th class="cal_week1"><?php echo _t('화요일');?></th> <th class="cal_week1"><?php echo _t('수요일');?></th> <th class="cal_week1"><?php echo _t('목요일');?></th> <th class="cal_week1"><?php echo _t('금요일');?></th> <th class="cal_week1"><?php echo _t('토요일');?></th> </tr> </thead> <tbody> <?php $day = 0; $totalDays = $firstWeekday + $lastDay; $lastWeek = ceil($totalDays / 7); for ($week=0; $week<$lastWeek; $week++) { // 주중에 현재 날짜가 포함되어 있으면 주를 현재 주 class(tt-current-week)를 부여한다. if (($today + $firstWeekday) >= $week * 7 && ($today + $firstWeekday) < ($week + 1) * 7) { echo ' <tr class="cal_week cal_current_week">'.CRLF; } else { echo ' <tr class="cal_week">'.CRLF; } for($weekday=0; $weekday<7; $weekday++) { $day++; $dayString = isset($calendar['days'][$day]) ? '<a class="cal_click" href="'.$service['path'].'/?archive='.$current.($day > 9 ? $day : "0$day").'">'.$day.'</a>' : $day; // 일요일, 평일, 토요일별로 class를 부여한다. switch ($weekday) { case 0: $className = " cal_day cal_day_sunday"; break; case 1: case 2: case 3: case 4: case 5: case 6: $className = " cal_day"; break; } // 오늘에 현재 class(tt-current-day)를 부여한다. $className .= $day == $today ? " cal_day4" : " cal_day3"; if ($week == 0) { if ($weekday < $firstWeekday) { $day--; // 달의 첫째날이 되기 전의 빈 칸. echo ' <td class="cal_day1"> </td>'.CRLF; } else { echo ' <td class="'.$className.'">'.$dayString.'</td>'.CRLF; } } else if ($week == ($lastWeek - 1)) { if ($day <= $lastDay) { echo ' <td class="'.$className.'">'.$dayString.'</td>'.CRLF; } else { // 달의 마지막날을 넘어간 날짜 빈 칸. echo ' <td class="cal_day2"> </td>'.CRLF; } } else { echo ' <td class="'.$className.'">'.$dayString.'</td>'.CRLF; } } echo ' </tr>'.CRLF; if ($day >= $lastDay) { break; } } ?> </tbody> </table> <?php $view = ob_get_contents(); ob_end_clean(); return $view; }