{"id":17492133,"url":"https://github.com/jupitern/scheduler","last_synced_at":"2025-04-22T20:16:56.082Z","repository":{"id":34071831,"uuid":"37861797","full_name":"jupitern/Scheduler","owner":"jupitern","description":"PHP Simple Scheduler - set occurrence expressions and get next x execution dates [Cron, Crontab, Task Scheduler]","archived":false,"fork":false,"pushed_at":"2024-12-05T15:05:53.000Z","size":15,"stargazers_count":23,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-22T20:16:44.838Z","etag":null,"topics":["php","recurring-events","schedule"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"vipulasri/Timeline-View","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jupitern.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-06-22T14:58:14.000Z","updated_at":"2024-12-05T15:06:13.000Z","dependencies_parsed_at":"2022-07-16T23:16:10.979Z","dependency_job_id":null,"html_url":"https://github.com/jupitern/Scheduler","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jupitern%2FScheduler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jupitern%2FScheduler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jupitern%2FScheduler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jupitern%2FScheduler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jupitern","download_url":"https://codeload.github.com/jupitern/Scheduler/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250316068,"owners_count":21410476,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["php","recurring-events","schedule"],"created_at":"2024-10-19T08:08:03.020Z","updated_at":"2025-04-22T20:16:56.057Z","avatar_url":"https://github.com/jupitern.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://scrutinizer-ci.com/g/jupitern/Scheduler/badges/build.png?b=master)](https://scrutinizer-ci.com/g/jupitern/Scheduler/build-status/master)\n[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/jupitern/Scheduler/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/jupitern/Scheduler/?branch=master)\n[![Latest Stable Version](https://poser.pugx.org/jupitern/scheduler/v/stable)](https://packagist.org/packages/jupitern/scheduler)\n[![Latest Unstable Version](https://poser.pugx.org/jupitern/scheduler/v/unstable)](https://packagist.org/packages/jupitern/scheduler)\n[![License](https://poser.pugx.org/jupitern/scheduler/license)](https://packagist.org/packages/jupitern/scheduler)\n\n# jupitern/scheduler\n#### PHP Scheduler.\n\nadd one time event dates or recurring event dates\nget next event date or next X event dates from a given date\n\n## Requirements\n\nPHP 8.0 or higher.\n\n## Installation\n\nInclude jupitern/scheduler in your project, by adding it to your composer.json file.\n```javascript\n{\n    \"require\": {\n        \"jupitern/scheduler\": \"1.*\"\n    }\n}\n```\n\n## Usage\n```php\n// instance Scheduler\n$schedules = \\Jupitern\\Scheduler\\Scheduler::instance()\n\n// limit events from 08.00 am to 17.00\n-\u003esetTimeFrame('08:00', '17:00')\n\n// add a one time event date\n// accepts any string compatible with php DateTime object\n-\u003eadd('2020-01-01 12:35')\n\n// add another one time event date\n// accepts any string compatible with php DateTime object\n-\u003eadd('2020-01-01 17:50')\n\n// add a recurring date\n// accepts any string compatible with php DateTime object\n-\u003eaddRecurring('+ 8 hours')\n\n// get next schedule starting at 2020-01-01\n-\u003egetNextSchedule('2020-01-01 00:00:00', 10);\n\n// get next 5 schedules starting at 2020-01-01\n-\u003egetNextSchedules('2020-01-01 00:00:00', 10);\n\n// display schedules\nforeach ($schedules as $schedule) {\n    echo $schedule-\u003eformat('Y-m-d H:i').\"\u003cbr/\u003e\";\n}\n\n```\n\n## Examples\n```php\n\n$schedules = \\Jupitern\\Scheduler\\Scheduler::instance()\n    -\u003eadd('2030-01-01 12:35')\n    -\u003eadd('2030-01-01 14:50')\n    -\u003eaddRecurring('+2 hours')\n    -\u003egetNextSchedules('2030-01-01 00:00:00', 10);\n\nforeach ($schedules as $schedule) {\n    echo $schedule-\u003eformat('Y-m-d H:i').'\u003cbr/\u003e';\n}\n\n/*\noutput:\n2030-01-01 00:00\n2030-01-01 02:00\n2030-01-01 04:00\n2030-01-01 06:00\n2030-01-01 08:00\n2030-01-01 10:00\n2030-01-01 12:00\n2030-01-01 12:35\n2030-01-01 14:00\n2030-01-01 14:50\n*/\n\n$schedules = \\Jupitern\\Scheduler\\Scheduler::instance()\n    -\u003esetTimeFrame('08:00', '17:00')\n    -\u003eadd('2030-01-01 12:35')\n    -\u003eadd('2030-01-01 14:50')\n    -\u003eaddRecurring('+2 hours')\n    -\u003egetNextSchedules('2030-01-01 00:00:00', 10);\n\nforeach ($schedules as $schedule) {\n    echo $schedule-\u003eformat('Y-m-d H:i').'\u003cbr/\u003e';\n}\n\n/*\noutput:\n2030-01-01 08:00\n2030-01-01 10:00\n2030-01-01 12:00\n2030-01-01 12:35\n2030-01-01 14:00\n2030-01-01 14:50\n2030-01-01 16:00\n2030-01-02 08:00\n2030-01-02 10:00\n2030-01-02 12:00\n*/\n\n\n$schedules = \\Jupitern\\Scheduler\\Scheduler::instance()\n    -\u003esetTimeFrame('08:30', '19:00')\n    -\u003eadd('+10 minutes')\n    -\u003eadd('+30 minutes')\t// outside time frame. will not produce any schedule\n    -\u003eadd('next day 08:30')\n    -\u003egetNextSchedules('2000-12-16 18:40');\n\nforeach ($schedules as $schedule) {\n    echo $schedule-\u003eformat('Y-m-d H:i').\"\u003cbr/\u003e\";\n}\n\n/*\noutput:\n2000-12-16 18:50\n2000-12-17 08:30\n*/\n\n```\n\n## ChangeLog\n\nv1.4\n\n- min php version updated to 8.0\n- code refactor for php 8\n- bug fix to avoid duplicate dates when calculated dates from different schedules match \n\n\nv1.3\n\n - Changed method add to allow relative one time events like \"+1 hour\" or \"next day 17:00\"\n - relative events added with method add() are relative to $fromStartDate and obey time frame if set\n\n## Contributing\n\n - welcome to discuss a bugs, features and ideas.\n\n## License\n\njupitern/scheduler is release under the MIT license.\n\nYou are free to use, modify and distribute this software\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjupitern%2Fscheduler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjupitern%2Fscheduler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjupitern%2Fscheduler/lists"}