7

PHP の strtotime() メソッドを使用して、フォームの日付フィールドを受け入れています。「明日」、「次の木曜日」、または (おそらく) 任意の日付表現を受け入れて、Unix タイムスタンプに変換する方法で、その強力さが気に入っています。

それはうまく機能しています - 昨日まで。誰かが「2-4-10」と入力すると、2010 年 2 月 4 日ではなく、2002 年 4 月 10 日と記録されました。そのため、MDY ではなく YMD が必要でした。

2 桁の年を使用しているだけに問題があるのではないかと思い、「2-4-2010」で再試行しました。これは 2010 年 4 月 2 日の記録です。その時点で、 strtotime() が何をしているのか理解できません。PHP.net は、米国英語の日付形式を想定していると述べています。では、なぜ DMY を想定するのでしょうか。

これを回避する方法はありますか?それとも strtotime() の使用をやめる必要がありますか?

注:私はちょうど今テストをしました。ハイフン/ダッシュの代わりにスラッシュを使用すると、2/4/10 でも問題なく動作します。なぜそれが問題なのですか?それだけなら、フォーム入力を strtotime() に渡す前に str_replace("-", "/", $input) を実行するだけでよいでしょうか?

4

4 に答える 4

7

- は ISO 日付を示します。

03-02-01  => 1. february 2003 (ISO)
01.02.03  => 1. february 2003 (European)
02/01/03  => 1. february 2003 (US)
于 2010-02-05T13:43:11.940 に答える
6

の動作は、strtotime()主にGNU 日付入力形式の仕様に基づいています。しかし、それがどれほど強力であっても、心を読むことは期待されるべきではありません. 自由形式のユーザー日付入力を許可すると、永続的な問題が発生します。

于 2010-02-05T13:56:30.763 に答える
1

私はこの問題を抱えていて、あなたが提案したことを正確に行うことで解決しstr_replaceました.ユーザーが入力した日付でaを実行して、ダッシュをスラッシュに置き換えます. これによりstrtotime、ISO 日付を使用できなくなり、問題が解決されます。

于 2010-04-14T01:37:09.310 に答える
0

strtotime は本質的にファジーであるため、常に希望どおりに動作するとは限りません。2010-04-02 と入力すると、2010 年 4 月 2 日が返されることが期待されます。これは、strottime が行おうとしていることです。ハイフンからスラッシュへの str_replace を実行すると、その形式で入力したユーザーが間違った日付を取得する可能性があります。

PHP 5.3 以降を実行している場合は、date_parse_from_format() を検討するか、UNIX 上の PHP 5.1 以降の場合は strptime() を検討してください。どちらの関数も形式をとるので、潜在的なあいまいさを取り除きます (想定している形式をユーザーに伝える場合 - 国際的なサイトを運営していて、ユーザーが 2010 年 2 月 4 日を入力する日付というラベルの付いたテキスト ボックスがある場合、予定日を知る方法)。

于 2010-10-12T15:58:14.537 に答える