PHPackages                             wick-ed/timely - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. wick-ed/timely

ActiveLibrary

wick-ed/timely
==============

Console interface for time tracking

3.0.2(3y ago)542[6 issues](https://github.com/wick-ed/timely/issues)[1 PRs](https://github.com/wick-ed/timely/pulls)MITPHPPHP ^7.3|^8.0

Since Jun 5Pushed 3y ago1 watchersCompare

[ Source](https://github.com/wick-ed/timely)[ Packagist](https://packagist.org/packages/wick-ed/timely)[ RSS](/packages/wick-ed-timely/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (6)Versions (20)Used By (0)

Timely
======

[](#timely)

Simple PHP console tool to track your times and push them into a remote time-keeping tool such as Jira.

[![Travis (.org) branch](https://camo.githubusercontent.com/09df6ae6aab29bae4901b122199b6dc3f3eb5a1a1b1d70230f0e6a298b7627b5/68747470733a2f2f696d672e736869656c64732e696f2f7472617669732f7769636b2d65642f74696d656c792f6d61737465722e7376673f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/09df6ae6aab29bae4901b122199b6dc3f3eb5a1a1b1d70230f0e6a298b7627b5/68747470733a2f2f696d672e736869656c64732e696f2f7472617669732f7769636b2d65642f74696d656c792f6d61737465722e7376673f7374796c653d666c61742d737175617265)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/01298cd0e7b312d34bc3c874a3f7ab936d23de427204e7a4a3c4d210e58d07b7/68747470733a2f2f696d672e736869656c64732e696f2f7363727574696e697a65722f672f7769636b2d65642f74696d656c792f6d61737465722e7376673f7374796c653d666c61742d737175617265)](https://scrutinizer-ci.com/g/wick-ed/timely/?branch=master)[![Code Coverage](https://camo.githubusercontent.com/a6250cc83f5b1dd73cc20a147c6569893f23e0b4c24e52cd5e0a83314054197f/68747470733a2f2f696d672e736869656c64732e696f2f7363727574696e697a65722f636f7665726167652f672f7769636b2d65642f74696d656c792f6d61737465722e7376673f7374796c653d666c61742d737175617265)](https://scrutinizer-ci.com/g/wick-ed/timely/?branch=master)

Introduction
------------

[](#introduction)

Semantic versioning
-------------------

[](#semantic-versioning)

This tool follows semantic versioning and its public API defines as follows:

- The commands it exposes over the command line interface
- The format of its storage file
- The format of its configuration file and the given configuration options

Usage
-----

[](#usage)

As an alias like:

```
alias timely="php //timely/bin/timely $*"
```

And use like:

```
timely track FOO-127 bar
```

Commands
--------

[](#commands)

There are several simple commands available, to track your everyday work:

- [track](#track)
- [show](#show)
- [pause](#pause)
- [push](#push)

### track

[](#track)

#### NAME

[](#name)

The **show** command tracks an activity you just started This activity has to be in relation to an identifier such as a ticket ID from your ticket system. Although this is only to structure your tracked times, it will be used when interaction with an actual ticket system.

An example call would be:

timely **show** FOO-42 Doing some stuff now

**track** -- Track tickets you are starting to work on just now

#### SYNOPSIS

[](#synopsis)

timely **track** ticket-id comment

#### DESCRIPTION

[](#description)

The **track** command tracks an activity you just started This activity has to be in relation to an identifier such as a ticket ID from your ticket system. Although this is only to structure your tracked times, it will be used when interaction with an actual ticket system.

#### EXAMPLES

[](#examples)

Start tracking your work on ticket `FOO-42` leaving a comment

```
timely track FOO-42 Doing some stuff now

```

### show

[](#show)

#### NAME

[](#name-1)

**show** -- Show tracked tasks, filterable by ticket id

#### SYNOPSIS

[](#synopsis-1)

timely **show** \[yesterday|today|current\] \[-t|f|s\] \[--to|from|specific\] \[ticket-id\]

#### DESCRIPTION

[](#description-1)

The **show** command is used to display times you have already tracked. By default, these times are grouped by the (ticket) identifier you used for tracking. Example output would look like this:

```
FOO-42     2019-11-28 17:41:17 -> 2019-11-29 15:59:25
====================================================
    * | 2019-11-28 17:41:17 | FOO-42 | 1h 15m | Doing some stuff now
    -------------------------------------------------
    1h 15m

```

Only tracked activities that already last or lasted longer than 15 minutes are shown.

#### EXAMPLES

[](#examples-1)

The tracked times in question can also be filter by supplying the optional (ticket) identifier:

```
timely show FOO-42

```

You can further filter by narrowing the time interval. This can be done by using supplied filter keywords current, today or yesterday:

```
timely show current

```

or

```
timely show yesterday

```

This filters for the tracking currently active (as in "what you are currently doing") or all tracked times of yesterday.

Filtering the processed time trackings is also possible through the **from**, **to** and **specific** options. These options support the PHp date and time format as described here: This allows for refined filtering as shown in the examples below.

Filter for a certain specific date:

```
timely show -s 2019-11-28

```

Filter for a given time range:

```
timely show -f 2019-11-28 -t 2019-11-30

```

Filter for the last week:

```
timely show -f"-1 week"

```

Filter for everything within the last October:

```
timely show -f"first day of october" -t"last day of october"

```

### pause

[](#pause)

#### NAME

[](#name-2)

**pause** -- Pause the current tracking until explicitly resumed

#### SYNOPSIS

[](#synopsis-2)

timely **pause** \[-r|--resume|comment\]

#### DESCRIPTION

[](#description-2)

The **pause** command allows to pause the tracking of your current task. This makes sense e.g. for a small break, lunch or simply for leaving work to continue the next morning.

```
timely pause going for lunch

```

After the pause is over, the current tracking must be resumed:

```
timely pause -r

```

If you start with something else, using the **track** command during an ongoing pause will also end the pause automatically.

#### EXAMPLES

[](#examples-2)

See above.

### push

[](#push)

#### NAME

[](#name-3)

**push** -- Pushes booked times against the configured remote

#### SYNOPSIS

[](#synopsis-3)

timely **push** \[yesterday|today|current\] \[-t|f|s\] \[--to|from|specific\] \[ticket-id\]

#### DESCRIPTION

[](#description-3)

The **push** command is used to push tracked times to an external time keeping service. Jira being an example of a supported service. Using the push command requires configuration of the service's endpoint and possibly authentication within the `.env` configuration file.

The command has the same syntax and usability as the **show** command. On execution the command will use the service's internal format to process all tracked times that a similar **show** command would have displayed.

The following command would create e.g. Jira worklogs for yesterday's tasks:

```
timely push yesterday

```

The **push** command keeps track of already pushed time trackings so nothing gets pushed twice.

#### EXAMPLES

[](#examples-3)

The tracked times in question can also be filter by supplying the optional (ticket) identifier:

```
timely push FOO-42

```

You can further filter by narrowing the time interval. This can be done by using supplied filter keywords current, today or yesterday:

```
timely push current

```

or

```
timely push yesterday

```

This filters for the tracking currently active (as in "what you are currently doing") or all tracked times of yesterday.

Filtering the processed time trackings is also possible through the **from**, **to** and **specific** options. These options support the PHp date and time format as described here: This allows for refined filtering as shown in the examples below.

Filter for a certain specific date:

```
timely push -s 2019-11-28

```

Filter for a given time range:

```
timely push -f 2019-11-28 -t 2019-11-30

```

Filter for the last week:

```
timely push -f"-1 week"

```

Filter for everything within the last October:

```
timely push -f"first day of october" -t"last day of october"

```

Storage format
--------------

[](#storage-format)

By default tracking data is stored within a simple text file called `timely-log.txt` within the `data` directory. Storage was intentionally kept this simple so manipulating your trackings could be done with text editors only. This allows for maximal flexibility, but lacks some of the more sophisticated features a database would give us. Trackings are saved chronologically with the most recent tracking on top. Also to allow for easy manual manipulation.

Working with the storage file always requires knowledge of the format in which trackings are saved.

Trackings are based on the following synopsis:

```
 | |  | [];

```

An example tracking looks like this:

```
2019-11-28 17:41:17 | FOO-42 | Doing some stuff now | ;

```

An example tracking which was already pushed to a remote time-keeping service (Jira in this example) looks like this:

```
2019-11-28 17:41:17 | FOO-42 | Doing some stuff now | jira 2019-11-28 19:27:17;

```

This contains the name of the service and a timestamp of the actual push.

Pauses utilized by the **pause** command have the same format, but use a specific identifier so they can be identified as meta information. An example of a pause (e.g. for a lunch break) containing start and end looks like this:

```
2019-11-28 12:41:17 | --pe-- |  | ;
2019-11-28 12:00:17 | --ps-- | lunch | ;

```

###  Health Score

28

—

LowBetter than 54% of packages

Maintenance0

Infrequent updates — may be unmaintained

Popularity10

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity77

Established project with proven stability

 Bus Factor1

Top contributor holds 80.2% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~204 days

Recently: every ~266 days

Total

13

Last Release

1180d ago

Major Versions

0.2.0 → 1.0.02019-04-06

1.0.0 → 2.0.02019-06-15

2.2.0 → 3.0.02023-02-16

PHP version history (3 changes)2.1.0PHP ^7.1

3.0.0PHP ^7.1|^8.0

3.0.2PHP ^7.3|^8.0

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/4931168?v=4)[Bernhard Wick](/maintainers/wick-ed)[@wick-ed](https://github.com/wick-ed)

---

Top Contributors

[![wick-ed](https://avatars.githubusercontent.com/u/4931168?v=4)](https://github.com/wick-ed "wick-ed (77 commits)")[![Mardl](https://avatars.githubusercontent.com/u/35043036?v=4)](https://github.com/Mardl "Mardl (15 commits)")[![zelgerj](https://avatars.githubusercontent.com/u/287595?v=4)](https://github.com/zelgerj "zelgerj (3 commits)")[![sippsolutions](https://avatars.githubusercontent.com/u/1697820?v=4)](https://github.com/sippsolutions "sippsolutions (1 commits)")

---

Tags

timescheduleticketstime booking

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/wick-ed-timely/health.svg)

```
[![Health](https://phpackages.com/badges/wick-ed-timely/health.svg)](https://phpackages.com/packages/wick-ed-timely)
```

###  Alternatives

[league/period

Time range API for PHP

7335.4M21](/packages/league-period)[florianv/business

DateTime calculations in business hours

359775.9k1](/packages/florianv-business)[zenstruck/schedule-bundle

Schedule Cron jobs (commands/callbacks/bash scripts) within your Symfony application.

4041.0M2](/packages/zenstruck-schedule-bundle)[shapecode/cron-bundle

This bundle provides scheduled execution of Symfony commands

59493.0k2](/packages/shapecode-cron-bundle)[guikingone/scheduler-bundle

A Symfony bundle that allows to schedule and create repetitive tasks

114217.4k](/packages/guikingone-scheduler-bundle)[orisai/scheduler

Cron job scheduler - with locks, parallelism and more

4037.1k4](/packages/orisai-scheduler)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
