w3lifer/php-calendar

功能全面的PHP日历

1.0.0 2022-05-20 22:55 UTC

This package is auto-updated.

Last update: 2024-09-26 17:55:23 UTC


README

安装

composer require w3lifer/php-calendar

使用

默认配置

可以根据您的意愿进行更改

$phpCalendar = new PhpCalendar([
    'language' => 'en',
    'monthNames' => ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
    'weekDayAbbrs' => ['Mon','Tue','Wed','Thu','Fri','Sat','Sun'],
    'firstDayOfWeek' => 1,
    'timezone' => date_default_timezone_get(),
]);

方法 get()

此方法是该类中的主要公共方法

public function get(
    int $numberOfMonths = 12,
    int $startMonth = null, // Default: date('n')
    int $startYear = null // Default: date('Y')
): PhpCalendar

它返回一个具有以下公共属性的 PhpCalendar 对象

  • $html string — HTML格式的日历
  • $prevPeriodParams array — 上一个期间的参数
  • $nextPeriodParams array — 下一个期间的参数

以下期间参数可用(数组键)

  • numberOfMonth
  • startMonth
  • startYear

PhpCalendar 类还定义了一个 __toString() 方法,该方法简单地返回其自己的 $html 属性(HTML日历)

HTML日历示例

<div class="php-calendar" data-timezone="UTC" data-timezone-offset="0">
    <div class="php-calendar_month-box" data-month-number="1">
        <table>
            <caption>
                <span class="php-calendar_month-name">January</span>
                <span class="php-calendar_year-name">1970</span>
            </caption>
            <tr>
                <th>Mon<th>Tue<th>Wed<th>Thu<th>Fri<th>Sat<th>Sun
            <tr>
                <td data-week-number="1" data-day-number="363" data-timestamp="-259200" class="php-calendar_day_other-month">
                    <span class="php-calendar_day">29</span>
                <td data-week-number="1" data-day-number="364" data-timestamp="-172800" class="php-calendar_day_other-month">
                    <span class="php-calendar_day">30</span>
                <td data-week-number="1" data-day-number="365" data-timestamp="-86400" class="php-calendar_day_other-month">
                    <span class="php-calendar_day">31</span>
                <td data-week-number="1" data-day-number="1" data-timestamp="0">
                    <span class="php-calendar_day php-calendar_today">1</span>
                <td data-week-number="1" data-day-number="2" data-timestamp="86400">
                    <span class="php-calendar_day">2</span>
                <td data-week-number="1" data-day-number="3" data-timestamp="172800">
                    <span class="php-calendar_day">3</span>
                <td data-week-number="1" data-day-number="4" data-timestamp="259200">
                    <span class="php-calendar_day">4</span>
            ...
        </table>
    </div>
    ...
</div>

12个月日历示例

<?php

$year = $_GET['year'] ?? null;
$phpCalendar = (new PhpCalendar())->get(12, 1, $year); // ->getYear($year);
$prevSearchParams = '?year=' . $phpCalendar->prevPeriodParams['startYear'];
$nextSearchParams = '?year=' . $phpCalendar->nextPeriodParams['startYear'];

?>

<style>body {text-align: center;} table {margin: auto;}</style>
<hr>
<a href="<?= $prevSearchParams ?>">«««</a> <a href="<?= $nextSearchParams ?>">»»»</a>
<hr>

<?= $phpCalendar ?>

周期日历示例

<?php

$numberOfMonths = $_GET['number-of-months'] ?? 6;
// Set `$startMonth` to `null` to get an auto-scrolling calendar
$startMonth = $_GET['start-month'] ?? 1;
$startYear = $_GET['start-year'] ?? null;
$phpCalendar = (new PhpCalendar())->get($numberOfMonths, $startMonth, $startYear);
$prevSearchParams =
    '?number-of-months=' . $numberOfMonths .
    '&start-month=' . $phpCalendar->prevPeriodParams['startMonth'] .
    '&start-year=' . $phpCalendar->prevPeriodParams['startYear'];
$nextSearchParams =
    '?number-of-months=' . $numberOfMonths .
    '&start-month=' . $phpCalendar->nextPeriodParams['startMonth'] .
    '&start-year=' . $phpCalendar->nextPeriodParams['startYear'];
?>

<style>body {text-align: center;} table {margin: auto;}</style>
<hr>
<a href="<?= $prevSearchParams ?>">«««</a> <a href="<?= $nextSearchParams ?>">»»»</a>
<hr>

<?= $phpCalendar ?>

测试

  • 要安装PHPUnit
make composer-i
  • 要运行测试
make tests