1: <?php
2: /*
3: * Copyright (c) 2015 @trashtoy
4: * https://github.com/trashtoy/
5: *
6: * Permission is hereby granted, free of charge, to any person obtaining a copy of
7: * this software and associated documentation files (the "Software"), to deal in
8: * the Software without restriction, including without limitation the rights to use,
9: * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
10: * Software, and to permit persons to whom the Software is furnished to do so,
11: * subject to the following conditions:
12: *
13: * The above copyright notice and this permission notice shall be included in all
14: * copies or substantial portions of the Software.
15: *
16: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17: * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18: * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
19: * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
20: * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21: * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22: */
23: /**
24: * PHP class file.
25: * @auhtor trashtoy
26: * @since 2.1.1
27: */
28: namespace Peach\DT;
29:
30: /**
31: * 指定された Clock を基準にして, 任意の秒数だけ未来または過去に移動させた現在日時を返す Clock の実装です.
32: */
33: class OffsetClock extends Clock
34: {
35: /**
36: * ベースとなる Clock です.
37: * @var Clock
38: */
39: private $base;
40:
41: /**
42: * 移動させる秒数です. 負の値を指定した場合は過去, 正の値を指定した場合は未来の方向に移動します.
43: * @var int
44: */
45: private $offset;
46:
47: /**
48: * 現在時刻を指定された秒数だけ未来または過去にずらす OffsetClock オブジェクトを生成します.
49: *
50: * @param int $offset 秒数
51: * @param Clock $base ベースとなる Clock オブジェクト. 未指定の場合は DefaultClock が適用される.
52: */
53: public function __construct($offset, Clock $base = null)
54: {
55: if ($base === null) {
56: $base = DefaultClock::getInstance();
57: }
58: $this->offset = $offset;
59: $this->base = $base;
60: }
61:
62: /**
63: * ベースとなる Clock オブジェクトの getUnixTime() の結果を指定された秒数だけ加減した結果を返します.
64: *
65: * @return int unix time
66: */
67: protected function getUnixTime()
68: {
69: return $this->base->getUnixTime() + $this->offset;
70: }
71: }
72: