Closed MizukiMatsutani closed 5 years ago
わいわい!
開始する
「chronos」でググるが、全然違うものばっかりヒットするので、「chronos php」でググると良さげ。 GitHubとCakePHPでの利用方法(公式っぽい)Documentが見つかった。が、CakePHPは動かさないので、除外
GitHubでライセンス見る https://github.com/cakephp/chronos/blob/master/LICENSE
↑のページで「MIT License」ってなっているので、ライセンス一覧(https://opensource.org/licenses/alphabetical)から探す。
ライセンス一覧にMITがあったので、OSSと判断
GitHubのREADMEを見てローカルにインストールしてみる https://github.com/cakephp/chronos
説明読んで見る。
Chronos aims to be a drop-in replacement for nesbot/carbon. It focuses on providing immutable date/datetime objects. Immutable objects help ensure that datetime objects aren't accidentally modified keeping data more predictable.
Google先生に訳してもらってなんとなく掴む。「carbonに変わるイミュータブルで予期せぬバグが起きにくいよ」らしい。 すげーいいじゃん。
インストールからやってみる。 https://github.com/cakephp/chronos#installation
経過がわかりやすいGreat issueだ!
composer require cakephp/chronos
を叩く
流石にこのライブラリ落とすような人は大丈夫だけど、
mkdir path/to/your/directory
cd path/to/your/directory
とか当たり前すぎるけどcomposerとかがインストール前提であったがいいかも
インストールできたっぽい
$ composer require cakephp/chronos
Using version ^1.2 for cakephp/chronos
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing cakephp/chronos (1.2.3): Downloading (100%)
Writing lock file
Generating autoload files
GitHubにあるサンプルソースを作って実行してみる。 以下をPrint.phpとして保存。
<?php
require 'vendor/autoload.php';
use Cake\Chronos\Chronos;
printf("Now: %s", Chronos::now());
実行してみる
$ php Print.php
Now: 2019-01-15 11:20:05
できた
順調そう
と思ったら、今20:20なんだけど。。。
$ date
2019年 1月15日 火曜日 20時22分43秒 JST
UTCなんかな
とりあえず、READMEを終えてから後でAPIドキュメントみて解決しよう
次に進む。けど、これはcarbonライブラリからの移行手順なので、今回はすっ飛ばす https://github.com/cakephp/chronos#migrating-from-carbon
サンプルには
// This will lose modifications
$date = new Chronos('2015-10-21 16:29:00');
$date->modify('+2 hours');
// This will keep modifications
$date = new Chronos('2015-10-21 16:29:00');
$date = $date->modify('+2 hours');
ってあるけど、イミュータブルであるよ!!て押したいのであれば、それを確認するソースがあってもいいんでない?
こうして、イミュータブルを確認した
// This will lose modifications
$date = new Chronos('2015-10-21 16:29:00');
$date->modify('+2 hours');
var_dump($date); // '2015-10-21 16:29:00'のまま!
// This will keep modifications
$date = new Chronos('2015-10-21 16:29:00');
$date2 = $date->modify('+2 hours');
var_dump($date !== $date2); // true!
var_dump($date); // '2015-10-21 16:29:00'のまま!
var_dump($date2); // '2015-10-21 18:29:00'になった
良い提案〜
サンプルはこれ
$time = new Chronos('2015-10-21 16:29:00');
$mutable = $time->toMutable();
$date = new Date('2015-10-21');
$mutable = $date->toMutable();
new Date()で落ちる。 PHPってDateクラスあったっけ?DateTimeクラスの間違い?
見つけましたね...!! 既にIssueやPullRequestで同様のフィードバックがないかなども確認しておいても良さそうです
use Cake\Chronos\Date;
がいる!!
もしくは
$date = new Cake\Chronos\Date();
のほうが親切
来ましたね
落ちた時のエラーメッセージもメモしておくと良さそうですね~!
Fatal error: Uncaught Error: Class 'Date' not found
のエラーが出た!
こっちもイミュータブルとと同じでミュータブルであることを確認できるサンプルがあるとメリット感あるかも。
https://github.com/oss-gate/workshop/issues/1024#issuecomment-454364701 指摘いただいたようにIssueとかPRみてみる。
次回、Issueを上げる。
おつかれさまでした!
後日のワークショップで再開する際に、issueタイトルの日付を更新してreopenしてください!
issueはクローズしますが、その後も作業を続けていただいて大丈夫です!
是非このissueを活用なさってください。
現在以下のイベントの開催を予定しています。
参加をお待ちしてます!
This is a work log of a "OSS Gate workshop". "OSS Gate workshop" is an activity to increase OSS developers. Here's been discussed in Japanese. Thanks.
作業ログ作成時の説明
以下のテンプレートを埋めてタイトルに設定します。埋め方例はスクロールすると見えてきます。
タイトル例↓:
OSS Gateワークショップ関連情報