6

形式に日付を必要とするフォームがあり、関数dd/mm/yyyyを使用してタイムスタンプに変換しようとしましたstrtotime()

しかし、次のように書かれた日付をフォームに入力した場合にのみ機能することがわかりましたdd-mm-yyyy

どうすれば解決できますか?海外ではわかりませんが、ここイタリアでは誰もそのような日付を書きませんdd-mm-yyyy

4

4 に答える 4

28

strotime()、などの関数の使用をやめdate()DateTimeの使用を開始します。time()

すべてのタイプの既知の入力に最適なソリューション:

$dt = DateTime::createFromFormat('d/m/Y', $yourDMYinput);
echo $dt->getTimestamp(); # or $dt->format('U');

そして、なぜタイムスタンプが必要なのですか?

なぜ爆発したり、交換したり、弦を切ったりするのですか??? createFromFormatを使用するだけです。

Q1: PHP 5.3 未満ではサポートされていないためです。

v5.5 は既にリリースされています。回答は、2006 年のコードではなく、最新のコードに対するものであるべきだと思います。はい、2006 年に v5.2 が、2009 年に v5.3 がリリースされました (リリース日を参照)。OPが古いコードを要求する場合は、SOで見つけて、この質問を複製して閉じます。それに答えないでください。

Q2: DateTime がわからないので。

学べ。

Q3:strotime()、などでできることが増えるからdate()です。time()

この関数で実行でき、DateTime で実行できないことを 1 つ示してください。

「非推奨」のコード例:

$input = '12/09/2013'; # dd/mm/yyyy

$new = substr($input,6,4)."-".substr($input,3,2)."-".substr($input,0,2);
$new = strtotime($new);
echo "$new\n";

$m = explode('/', $input);
$new = mktime(0,0,0,$m[1],$m[0],$m[2]);
echo "$new\n";

$new = str_replace("/", "-", $input);
$new = strtotime($new);
echo "$new\n";

preg_match('~^(\d+)/(\d+)/(\d+)$~', $input, $m);
$new = strtotime("$m[3]-$m[2]-$m[1]");
echo "$new\n";

$m = sscanf($input, '%d/%d/%d');
$new = strtotime("$m[2]-$m[1]-$m[0]");
echo "$new\n";

廃止されたコードの別の例がある場合は、この回答を編集して追加してください;)

于 2013-09-12T11:07:44.777 に答える
0

かなり長い。

$get_array = explode('/', 'dd/mm/yyyy');

$day = $get_array[0];
$month = $get_array[1];
$year = $get_array[2];
$time_Stamp = mktime(0,0,0,$month,$day,$year);
于 2013-09-12T09:59:27.640 に答える
0

なぜstr_replaceを使用しないのですか?

$timestamp = strtotime(str_replace("/", "-", $dateString));

または、挿入する前に文字列を変換してYYYY-MM-DDください。

于 2013-09-12T09:54:57.027 に答える