0

私は奇妙な問題を抱えています。それぞれの日付でデータベースにいくつかの値を挿入しようとしています。HTML 形式では、日付形式は mm/dd/yyyy 形式です。yyyy-mm-dd次のPHPを使用して、この形式をmysql形式に変換しました(stackoverflowの回答から)

echo $date1 = str_replace("/","-",$_POST['date']);
echo $date = date('Y-m-d', strtotime($date1));

しかし、上記の echo 、コードを実行すると、次のように表示されます。 07-30-2012 1970-01-01

4

6 に答える 6

3

m/d/y または dmy 形式の日付は、さまざまな構成要素間の区切り記号を調べることで明確になります。区切り記号がスラッシュ (/) の場合、アメリカの m/d/y が想定されます。一方、セパレータがダッシュ (-) またはドット (.) の場合は、ヨーロッパの dmy 形式が想定されます。詳細については、 http://php.net/manual/en/function.strtotime.phpを参照してください。

したがって、「07-30-2012」を入力として渡しても、07 を日付、30 を月と見なしているため、誤った結果が得られます。

以下はうまくいくはずです

echo $date = date('Y-m-d', strtotime($_POST['date']));
于 2012-07-30T05:40:08.040 に答える
1
echo $date1 = str_replace("/","-","$_POST['date']");
echo $date = date('Y-m-d', strtotime($date1));

日付に二重引用符を入れると、完璧な結果が得られます

于 2012-07-30T05:38:45.447 に答える
1
echo $date = preg_replace('/^(\d\d)\/(\d\d)\/(\d{4})$/', '$3-$1-$2', $_POST['date']);

このコードは問題なく動作すると思いますが、もちろん、データベースに挿入する前に必要なすべてのチェックを行う必要があります。

于 2012-07-30T05:36:31.267 に答える
0

echo $date = date('Y-m-d', strtotime($_POST['date']));

最初の行は正しくありません。これは false を返します。これは (整数に変換されて) 0 です。0 は Linux マシンの時間の始まりです! (したがって 1970-01-01)

于 2012-07-30T05:39:38.367 に答える
0

入力はmm/dd/yyyy形式です。つまり、スラッシュを使用する必要があります。リンク先の回答に示されているように、形式/を使用している場合はダッシュに変更する必要があります。dd-mm-yyyyしたがって、あなたの場合、を交換しないでください/

于 2012-07-30T05:40:14.940 に答える
0

私はちょうど試しました:

$date = "30/07/2012";
echo $date1 = str_replace("/","-",$date);
echo '<br />';
echo $date = date('Y-m-d', strtotime($date1));

そして、それは実際に戻ってきます:

30-07-2012
2012-07-30

$_POST['date'] 形式を確認する必要があります。

于 2012-07-30T05:34:08.890 に答える