| Package Data | |
|---|---|
| Maintainer Username: | appkr | 
| Maintainer Contact: | juwonkim@me.com (appkr) | 
| Package Create Date: | 2017-06-02 | 
| Package Last Update: | 2017-07-04 | 
| Language: | PHP | 
| License: | MIT | 
| Last Refreshed: | 2025-10-25 03:01:44 | 
| Package Statistics | |
|---|---|
| Total Downloads: | 24 | 
| Monthly Downloads: | 0 | 
| Daily Downloads: | 0 | 
| Total Stars: | 2 | 
| Total Watchers: | 1 | 
| Total Forks: | 1 | 
| Total Open Issues: | 0 | 
Manipulates application(Laravel/Lumen) server's time arbitrarily for a given minutes.
CAVEATUSE THIS ONLY FOR TEST PURPOSE. DO NOT MAKE THIS AVAILABLE IN PUBLICLY ACCESSIBLE SERVICES.
- Provided apis are not protected by authz.
- While setting is alive, it affects all time related functions of the application. e.g.
created_atwritten in the DB tables.
Pull the library to your project.
composer install appkr/timemachine 
Append service provider in the providers array.
<?php // config/app.php (Laravel)
return [
    'providers' => [
        Appkr\Timemachine\TimemachineServiceProvider::class,
    ],
];
// boostrap/app.php (Lumen)
$app->register(Appkr\Timemachine\TimemachineServiceProvider::class);
Optionally publish config.
php artisan vendor:publish --provider="Appkr\Timemachine\TimemachineServiceProvider"
There are three APIs. For conveniences, a Postman collection is provided.
Returns time diff from current server time when target_server_time parameter is given. Or print current server time when nothing is given.
GET /timemachine
Accept: application/json
Content-Type: application/json
field|type|required|description
---|---|---|---
target_server_time|date(Y-m-d H:i:s)|optional|e.g. 2017-06-01 12:05:00
HTTP/1.1 200 OK
Content-Type: application/json
Date: Thu, 01 Jun 2017 12:00:00 +0900
{
  "current_server_time": "2017-06-01T12:00:00+0900",
  "target_server_time": "2017-06-01T12:05:00+0900",
  "add_days": 0,
  "add_minutes": 5,
  "sub_days": null,
  "sub_minutes": null
}
Manipulates server's time for the given ttl.
PUT /timemachine
Accept: application/json
Content-Type: application/json
{
    "add_minutes": 5,
    "ttl": 5
}
field|type|required|description
---|---|---|---
add_days|int|optional(max:365)|Number of days to add to current time
sub_days|int|optional(max:365)|Number of days to subtract from current time
add_minutes|int|optional(max:1440)|Number of minutes to add to current time
sub_minutes|int|optional(max:1440)|Number of minutes to subtract from current time
ttl|int|optional(default:5, max:60)|Number of minutes for settings to live
HTTP/1.1 200 OK
Content-Type: application/json
Date: Thu, 01 Jun 2017 12:00:00 +0900
{
  "current_server_time": "2017-06-01T12:00:00+0900",
  "message": "Success. The settings will be effective from next request on for 5 minutes."
}
Removes time setting and restore back to the machine time.
DELETE /timemachine
Accept: application/json
Content-Type: application/json
HTTP/1.1 200 OK
Content-Type: application/json
Date: Thu, 01 Jun 2017 12:00:00 +0900
{
  "current_server_time": "2017-06-01T12:00:00+0900",
  "message": "Success. Settings removed."
}
This library is a by-product of a company project. Thanks MeshKorea.

Open source version was created using IntelliJ IDE sponsored by JetBrains.

In Nginx, Date header can be settable from application side. So the following was possible:
<?php
header('Date: ' . Carbon\Carbon::now()->addMinutes(5)->toRfc2822String());
echo $httpResponseBody;
While in Apache, it is not doable. https://laracasts.com/discuss/channels/servers/how-can-i-override-http-date-response-header-under-apache24