私が父親になってから 1 年半が経ちますが、それは PR の統合やこのパッケージの推進に時間どおりに取り組んできたことにはっきりと表れています。ここでの最大の制約は時間です。より多くの時間とプロジェクトを推進する意欲のある人に喜んでプロジェクトを譲渡したいと思います。メッセージを送ってください。乾杯!
_ _
_ _ ___ ___ _ _ ___ ___ _ _ _ | |_ _ _ | |__ _ _
| '_ ` _ / _ | '_ ` _ / _ '_ | __| | '_ | '_ | '_
| | | | | | (_) | | | | | | __/ | | | |_ _| |_) | | | | |_) |
|_| |_| |_|__/|_| |_| |_|___|_| |_|__(_) .__/|_| |_| .__/
|_| |_|変更ログ
i18n を使用して日付を解析、操作、および書式設定するための日付ライブラリ。
moment.php は PHP の DateTime クラスに基づいているため、PHP 5.3 以降。
Composer 経由で簡単にインストールできます。作曲家が何なのかまだわかりませんか?ここで自分自身に知らせてください。
composer require fightbulc/moment
$m = 新しいモーメントモーメント(); // デフォルトは「現在」UTCecho $m->format(); // 例 2012-10-03T10:00:00+0000$m = new MomentMoment('now', 'ヨーロッパ/ベルリン');echo $m->format(); // 例 2012-10-03T12:00:00+0200$m = new MomentMoment('2017-06-06T10:00:00', 'ヨーロッパ/ベルリン');echo $m->format(); // 例: 2012-10-03T12:00:00+0200$m = new MomentMoment(1499366585);echo $m->format(); // 例: 2017-07-06T18:43:05+0000Moment は、次の日付形式を入力として解析します。
const ATOM = 'Ym-dTH:i:sP'; // 2005-08-15T15:52:01+00:00const COOKIE = 'l, dMy H:i:s T'; // 月曜日、2005 年 8 月 15 日 15:52:01 UTCconst ISO8601 = 'Ym-dTH:i:sO'; // 2005-08-15T15:52:01+0000const RFC822 = 'D, d M y H:i:s O'; // 月曜日、15 年 8 月 05 日 15:52:01 +0000const RFC850 = 'l, dMy H:i:s T'; // 月曜日、2005 年 8 月 15 日 15:52:01 UTCconst RFC1036 = 'D, d M y H:i:s O'; // 月曜日、15 年 8 月 05 日 15:52:01 +0000const RFC1123 = 'D, d M Y H:i:s O'; // 月曜日、2005 年 8 月 15 日 15:52:01 +0000const RFC2822 = 'D, d M Y H:i:s O'; // 月曜日、2005 年 8 月 15 日 15:52:01 +0000const RSS = 'D, d M Y H:i:s O'; // 月曜日、2005 年 8 月 15 日 15:52:01 +0000const W3C = 'Ym-dTH:i:sP'; // 2005-08-15T15:52:01+00:00// Moment は、タイムゾーンまたは秒なしで日付を解析しようとしますconst NO_TZ_MYSQL = 'Ymd H:i:s'; // 2005-08-15 15:52:01const NO_TZ_NO_SECS = 'Ymd H:i'; // 2005-08-15 15:52const NO_TIME = 'Ymd'; // 2005-08-15// 時間の小数部分「.000」は自動的に削除されます$timeWithFraction = '2016-05-04T10:00:00.000';
Localesフォルダーを参照して、サポートされているすべての言語を確認してください。デフォルトのロケールはen_GBです。
$m = new MomentMoment();echo $m->format('[平日:] l'); // 例 平日: 水曜日// set german localeMomentMoment::setLocale('de_DE');$m = new MomentMoment();echo $m->format('[Wochentag:] l'); // 例: Wochentag: Mittwochこれまでにサポートされている言語:
ar_TNアラビア語 (チュニジア) ca_ESカタロニア語cs_CZチェコda_DKデンマーク語 de_DE ドイツ語 (ドイツ) en_US英語 (カナダ) en_GB英語 (英国) en_CA英語 (アメリカ) eo_EOエスペラント語es_ESスペインde_DE (ヨーロッパ) fa_IRペルシア語fi_FIフィンランド語fr_CAフランス語 (カナダ) fr_FRフランス語 (ヨーロッパ) hu_HUハンガリーid_IDインドネシアit_ITイタリアja_JP日本語kz_KZカザフlv_LVラトビア語 (Latviešu) nl_NLオランダ語oc_LNCレンガドシア語pl_PLポーランド語pt_BRポルトガル語 (ブラジル) pt_PTポルトガル語 (ポルトガル) ru_RUロシア語 (基本バージョン) sv_SEスウェーデン語th_THタイ語tr_TRトルコ語uk_UAウクライナ語vi_VNベトナム語zh_CN中国語zh_TW中国語 (繁体字)
$m = 新しい MomentMoment('2012-04-25T03:00:00', 'CET');echo $m->setTimezone('UTC')->format(); // 2012-04-25T01:00:00+0000MomentMoment::setDefaultTimezone('CET');$m = 新しい MomentMoment('2016-09-13T14:32:06');echo $m->format(); // 2016-09-13T14:32:06+0100 $m = new MomentMoment('2012-04-25T03:00:00', 'CET');echo $m->format('l, dS F Y / H:i (e)'); // 2012 年 4 月 25 日水曜日 / 03:00 (ヨーロッパ/ベルリン)形式は、PHP の Date 関数と DateTime クラスに基づいています。
FormatsInterface実装するクラスを渡すことで、さまざまなフォーマット処理を挿入できるようになりました。テスト フォルダー内に、moment.js のすべての形式を実装するための例があります。 moment.js形式を PHP 形式と一致させるために時間を割いてくださった Ashish に感謝します。テスト スクリプトを見て、実際の例を確認してください。
誰もが同じ方法で形式クラスを作成できます。簡単で拡張性があります。
// 必要な形式を取得します class// moment を作成します$m = new MomentMoment('2012-04-25T03:00:00', 'CET');// moment.js 定義で形式を設定しますsecho $m->format('LLLL '、新しい MomentCustomFormatsMomentJs()); // 2012 年 4 月 25 日水曜日、午前 3 時Custom formats 、すべてのLocaleの一部として使用することもできます。あなたのロケールにまだ存在しない場合は、追加してください。フランス語ロケールの例を参照してください。
すべてのテキストを[]で囲むだけで、すべての文字が自動的にエスケープされます。
$m = new MomentMoment('2012-04-25T03:00:00', 'CET');echo $m->format('[私たちは次の月にいます:] F'); // 現在は 4 月ですPHP の内部順序計算にはバグがあるようです。この問題を処理するための簡単な修正を追加しました。
次の例では、指定された日付の年の週を出力します。 22ndが出力されるはずです。
// 内部関数date('WS', mktime(12, 22, 0, 5, 27, 2014)); // 22 日// moment.php$m = new MomentMoment('2014-05-27T12:22:00', 'CET');$m->format('WS'); // 22日$m = 新しい MomentMoment('2012-05-15T12:30:00', 'CET');echo $m->addHours(2)->format(); // 2012-05-15T14:30:00+0200$m = new MomentMoment('2012-05-15T12:30:00', 'CET');echo $m->subtractDays(7)->subtractMinutes(15) )->フォーマット(); // 2012-05-08T12:15:00+0200$m = 新しい MomentMoment('@1401443979', 'CET'); // unix timeecho $m->subtractDays(7)->subtractMinutes(15)->format(); // 2014-05-23T09:44:39+0000場合によっては、原点を変更せずに特定の瞬間を取り出して操作すると便利です。そのためには、 cloning()を使用します。
$m = 新しい MomentMoment('2012-05-15T12:30:00', 'CET');$c = $m->cloning()->addDays(1);echo $m->getDay(); // 15echo $c->getDay(); // 16あるいは、オリジンで不変モードを有効にすることもできます。
$m = 新しい MomentMoment('2012-05-15T12:30:00', 'CET', true);$c = $m->addDays(1);echo $m->getDay(); // 15echo $c->getDay(); // 16// 作成後に不変モードを変更することもできます:$m->setImmutableMode(false)->subtractDays(1);echo $m->getDay(); // 14不変モードでは、すべての変更メソッドが変更を適用する前に暗黙的にcloning()を呼び出します。
| 追加 | 減算 |
|---|---|
| addSeconds($s) | 減算秒($s) |
| addMinutes($i) | 減算分($i) |
| addHours($h) | 減算時間($h) |
| addDays($d) | 減算日($d) |
| addWeeks($w) | 週の減算($w) |
| addMonths($m) | 減算月数($m) |
| add年数($y) | 減算年($y) |
| セッター | ゲッター |
|---|---|
| setSecond($s) | getSecond() |
| setMinute($m) | getMinute() |
| setHour($h) | getHour() |
| setDay($d) | getDay() |
| setMonth($m) | getMonth() |
| setyear($y) | get年() |
| -- | getQuarter() |
$m = new MomentMoment('2013-02-01T07:00:00');$momentFromVo = $m->fromNow();// または特定の瞬間から$m = new MomentMoment('2013-02-01T07: 00:00');$momentFromVo = $m->from('2011-09-25T10:00:00');// 結果は値オブジェクトとして返されます classecho $momentFromVo->getDirection() // "future"echo $momentFromVo->getSeconds() // -42411600echo $momentFromVo->getMinutes() // -706860echo $momentFromVo->getHours() // -11781echo $momentFromVo->getDays() // -490.88echo $momentFromVo->getWeeks() // -70.13echo $momentFromVo->getMonths() // -17.53echo $momentFromVo- >getyears() // -1.42echo $momentFromVo->getRelative() // 1 年以内特定の日付の期間の境界を取得すると役立つ場合があります。たとえば、今日が水曜日で、今日の週の開始日と終了日が必要な場合です。指定できる期間は、 week 、 month 、 quarterです。
$m = new MomentMoment('2013-10-23T10:00:00');$momentPeriodVo = $m->getPeriod('week');// 結果だけでなく値オブジェクトも取得されます classecho $momentPeriodVo->getStartDate( )
->フォーマット('Ymd'); // 2013-10-21echo $momentPeriodVo->getEndDate()
->フォーマット('Ymd'); // 2013-10-27echo $momentPeriodVo->getRefDate()
->フォーマット('Ymd'); // 2013-10-23echo $momentPeriodVo->getInterval(); // 43 = 年間の週月次期間と四半期期間についても同じ手順:
$momentPeriodVo = $m->getPeriod('month');$momentPeriodVo = $m->getPeriod('四半期');カレンダー時間は、 nowを基準とした相対的な時間を表示しますが、 Moment::fromNow()とは若干異なります。 Moment::calendar()日付が今日にどれだけ近いかに応じて、異なる文字列で日付をフォーマットします。
(new MomentMoment('2014-03-30T16:58:00', 'CET'))->subtractDays(6)->calendar(); // 先週(new MomentMoment('2014-03-30T16:58:00', 'CET'))->subtractDays(1)->calendar(); // 昨日(new MomentMoment('2014-03-30T16:58:00', 'CET'))->calendar(); // today(new MomentMoment('2014-03-30T16:58:00', 'CET'))->addDays(1)->calendar(); // 明日(new MomentMoment('2014-03-30T16:58:00', 'CET'))->addDays(3)->calendar(); // 来週(new MomentMoment('2014-03-30T16:58:00', 'CET'))->addDays(10)->calendar(); // その他すべて| 時間 | 画面 |
|---|---|
| 先週 | 先週の月曜日 15:54 |
| 前日 | 昨日の15時54分 |
| 同日 | 今日の15:54 |
| 次の日 | 明日の15:54に |
| 翌週 | 水曜日 15:54 |
| その他すべて | 2014/04/09 |
注: at 00:00時刻を省略するには、 $moment->calendar(false)を使用します。
moment.js と同じプロセス: 元の瞬間を時間単位の開始/終了に設定することで変更します。
$m = 新しい MomentMoment('20140515T10:15:23', 'CET');$m->startOf('year'); // 今年の 1 月 1 日の 00:00 に設定$m->startOf('四半期'); // 現在の四半期の初め、月の 1 日、00:00$m->startOf('month'); に設定します。 // 今月の 1 日に設定、00:00$m->startOf('week'); // 今週の最初の日、00:00$m->startOf('day'); に設定します。 // 今日の 00:00 に設定$m->startOf('hour'); // 現在に設定されますが、0 分 0 秒です$m->startOf(' minutes'); // 現在に設定されますが、0 秒です $m->endOf('year'); // 今年の 12 月 31 日 23:59 に設定$m->endOf('quarant'); // 現在の四半期の終わり、月の最終日、23:59$m->endOf('month'); に設定します。 // 今月の末日 23:59 に設定$m->endOf('week'); // 今週の最終日 23:59 に設定$m->endOf('day'); // 今日の 23:59 に設定 $m->endOf('hour'); // 現在に設定されますが、59 分 59 秒$m->endOf(' minutes'); // 現在に設定されますが、59 秒になります注:ミリ秒を扱っていないため、 secondのピリオドは無視しました。
私の顧客の 1 人のために、選択した平日までに時間を確保する必要がありました。課題は、今後 3 週間のTuesdaysとThursdaysの日付を教えてくださいというものでした。そこで、まさにこれを行う小さなハンドラーを追加しました。結果として、 Moment Objectsで満たされた配列を受け取ります。
// 1 - 7 = 月 - 日$weekdayNumbers = [2, // 火曜4, // 木曜];$m = new MomentMoment();$dates = $m->getMomentsByWeekdays($weekdayNumbers, 3);// $日付 = [瞬間、瞬間、瞬間 ...]
これで、結果を実行して、それをドロップダウン フィールドまたは必要に応じてフォーマットして配置できます。
moment.js から便利なメソッドを移植してみる
単体テストを追加する
追加した:
PHP 8.2 #218 のサポート
PHP 8.3 #227 のサポート
修理済み:
フランス語のロケール
カナダのテスト
追加した:
エスペラント語ロケール
カザフスタンのロケール
修理済み:
DateTime::createFromFormat 署名の一致
追加した:
ペルシア語ロケール
追加した:
GH アクション ワークフローに対するコード チェック
英語/フランス語のカナダロケール
修理済み:
いくつかの PR とマージします (ありがとう!)
追加した:
終了ロケール
修理済み:
スウェーデンのロケール
イタリア語のロケールを更新しました
追加した:
en_US のカスタム形式
同様のロケールをロードするためのフラグ
タイプヒントの問題を修正
修理済み:
relativeTime 形式がありません
9 桁の Unixtime を許可する
RFC2822 を有効な形式として修正
固定された相対時間
ノルウェー語ロケールを追加しました
修正とロケールの追加 (2018 年 11 月 22 日のコミットを参照)
修理済み:
オック語のロケール
修理済み:
ロシアのロケールの問題
追加した:
ポルトガル語 (pt_PT)
修理済み:
ハンガリーロケールの平日注文
追加した:
@ を先頭に付けずに Unix タイムスタンプを使用して Moment を初期化できるようにします
修理済み:
カスタムフォーマットの「LLL」のフォーマットを修正
修理済み:
php5.4以降のみの構文を削除
修理済み:
デンマーク語の曜日と月名の大文字小文字の区別が正しい
フランス語のロケール
PHPDoc
追加した:
日付解析時のNO_TZ_MYSQL 、 NO_TZ_NO_SECSおよびNO_TIMEの定数
追加した:
オランダのカスタムフォーマット
修理済み:
ロシアのロケール
追加した:
トルコのロケール
修理済み:
レンガドキアのロケール
修理済み:
PHP7.1のsetTimeには$microsecondsが必要です
追加した:
ウクライナのロケール
追加した:
ハンガリー語のロケール
修理済み:
レンガドキアのロケール
追加した:
ベトナムのロケール
レンガドキアのロケール
追加した:
デフォルトのタイムゾーンを変更する
修理済み:
フォーマットインターフェイスドキュメント
追加した:
アラビア語ロケール
ロケールレベルのカスタムフォーマット
修理済み:
ロシアのロケール
追加した:
ロシア語のロケールテスト
修理済み:
ポーランドのロケール
秒の計算
修理済み:
ロシア語: 相対時間の修正が増えました
修理済み:
ロシア語ロケールの相対時間: 日の扱い
修理済み:
不変ハンドリングが欠落している
修理済み:
ポーランド語ロケールの改善 (Nominativ の追加)
修理済み:
中国語ロケール
受け入れ可能な形式を README に追加しました
修理済み:
タイ語ロケール
追加した:
カタルーニャ語のロケール
修理済み:
ポーランド語ロケールテスト
追加した:
ロシアのロケール
修理済み:
ポーランド語ロケールテスト
追加した:
不変モード
修理済み:
ポーランドのロケール
追加した:
ポーランドのロケール
追加した:
インドネシアのロケール
追加した:
日本語ロケール
修理済み:
オランダ語ロケールのタイプミス
追加した:
オランダのロケール
追加した:
スウェーデンのロケール
追加した:
デンマークのロケール
修理済み:
ルーマニア語ロケールの開始/終了平日を修正
修理済み:
イタリア語ロケールに区切り文字を追加する
修理済み:
週、月、四半期の startOf/endOf の新しいインスタンスを返します。
追加した:
ロケール チェコ語
追加した:
calendarロケールは次の params function(Moment $m) {}クロージャとして受け取ります。
relativeTimeロケールは、次の params function($count, $direction, Moment $m) {}クロージャとして受け取ります。
追加した:
クロージャをロケール (カレンダー、相対時間) に渡す問題を修正しました。
正しいドイツ語ロケール情報を設定する
追加した:
タイ語のロケール文字列を修正しました
追加した:
ロケール繁体字中国語
追加した:
ロケール中国語
序数フォーマッタはtokenを受け取ります。たとえば、 dS内のトークンはdです。
修正: 11 ~ 13 の数字に対する英語の序数の問題
追加: ロケール イタリア語
修正: 英語の序数の問題
追加: ロケールポルトガル語
修理済み:
ロケールで間違った月名が表示される (#34)
ロケールファイル内の曜日の順序を変更しました。
追加した:
getWeekdayNameLong()
getWeekdayNameShort()
getMonthNameLong()
getMonthNameShort()
追加した:
ロケール: タイ語
追加した:
getMonths()
get年()
getRelative()
ロケール
モーメントフロムヴォ:
修理済み:
getSeconds() は方向も示すようになりました
モーメントフロムヴォ:
修理済み:
unixtime の日付でのみ発生するタイムゾーンの問題
他の:
方向は現在戻ります: 「未来」 (-) / 「過去」 (+)
時間値が float として型キャストされるようになりました。
モーメントフロムヴォ:
修理済み:
モーメント構築時に認識されないタイムゾーン
追加した:
getMomentsByWeekdays()
getWeekday()
getWeekOf Year()
他の:
エスケープされたテキスト
追加した:
例: [Hello World]自動的にHello Worldに変換されます
たとえば、年の 21 週目のWS 、正しい21thなどを表示するようになりました。
特定の年の特定の四半期の期間を取得する
week = 年間の週
month = その年の月
quarter = 年の四半期
指定されたインスタンスに基づいて新しい可変モーメントを作成します
moment.js によって実装された startOf と endOf
指定された日付の四半期期間を取得します
setDay()
getDay()
setMonth()
getMonth()
setyear()
get年()
getQuarter()
setSecond()
getSecond()
setMinute()
getMinute()
setHour()
getHour()
クローン作成()を追加しました
指定された期間の間隔を示すためにgetInterval() MomentPeriodVoに追加しました
静的クラスMomentHelperを追加しました
PHP の内部順序計算を修正しました (moment.js フォーマットとの組み合わせも)
テキストを[]で囲むことでエスケープできるようになりました
削除されました:
追加()
減算()
追加した:
moment.js によって実装されたカレンダー形式
修理済み:
PHP 5.3との非互換性
追加した:
YYYY-mm-ddおよびYYYY-mm-ddTHH:ii:ss形式の日付をテストします。
無効な日付で MomentException をスローします
MomentExceptionとして例外をスローする
インスタンス化時の日付検証:
addSeconds()
addMinutes()
addHours()
addDays()
addWeeks()
addMonths()
add年()
減算秒()
減算分()
減算時間()
減算日()
減算週()
減算月数()
減算年数()
非推奨:
追加()
減算()
このプロジェクトの管理者は、貢献ガイドに従うことを推奨しています。
Moment.php は、MIT ライセンスの条件に基づいて自由に配布できます。
著作権 (c) 2017 ティノ・エーリッヒ
本ソフトウェアおよび関連ドキュメント ファイル (以下「ソフトウェア」) のコピーを入手した人には、使用、コピー、変更、マージする権利を含むがこれらに限定されない、制限なくソフトウェアを取り扱う許可が、ここに無償で与えられます。 、以下の条件を条件として、本ソフトウェアのコピーを出版、配布、サブライセンス、および/または販売すること、および本ソフトウェアが提供される人物にそのことを許可すること。
上記の著作権表示およびこの許可通知は、ソフトウェアのすべてのコピーまたは主要部分に含まれるものとします。
ソフトウェアは「現状のまま」提供され、明示的か黙示的かを問わず、商品性、特定目的への適合性、および非侵害の保証を含むがこれらに限定されない、いかなる種類の保証も行われません。いかなる場合においても、作者または著作権所有者は、契約行為、不法行為、またはその他の行為であるかどうかにかかわらず、ソフトウェアまたはソフトウェアの使用またはその他の取引に起因または関連して生じる、いかなる請求、損害、またはその他の責任に対しても責任を負わないものとします。ソフトウェア。