PHP でエポック化する mm/dd/yyyy 形式
質問
Web サイトのさまざまな部分で並べ替えとフィルターを行うために、エントリの日付に相当する UNIX エポック タイム スタンプに依存する mysql テーブルがあります。mm/dd/yyyy 形式でフォームフィールドに日付を入力する日付ピッカーを実装しようとしています。その日付をUNIXエポック形式に変換して行フィールドにそのエントリを追加するのに苦労しています。私が行ったすべての試みの結果、現在の日のエポック タイム スタンプが生成されました。その日付形式を取得して、同等のエポックタイムスタンプに変換する方法を知っている人はいますか?
前もって感謝します。
追加情報:
mktime を試してみましたが、得られるのは今日のエポックだけです。申し訳ありませんが、もっとわかりやすく説明するために、もっと早くにコードを追加する必要がありました。
フォームIDは「日付」ですデータベースフィールドは「エポック」です
日付を投稿するときに私が(失敗して)試みていることは次のとおりです。
$epochhold = ($_POST['date']);
$epoch = mktime(0,0,0,$epochhold);
以前の投稿から、mktime が期待する mm、dd、yyyy ではなく、値を mm/dd/yyyy として送信することは理解していますが、その投稿ではその方法についての提案と解決策が提供されていませんでした。str_replace を実行して「/」を「,」に変更してみましたが、同じ結果が得られました。入力された日付に関係なく、今日のエポック日付が取得されました。
これがそのコード例です - これもうまくいきませんでしたが、私が試したことを説明するために追加しました
$epochhold = ($_POST['date']);
$epochold2 = str_replace('/', ', ', $epochhold)
$epoch = mktime(0,0,0,$epochhold2);
前回の返信もありがとうございました。素早い返信が無視されるのは望ましくありませんでした。
みんな、ありがとう!
返信してくれた皆さんに感謝します。strtotime は最初のテストで最もうまく機能しているようです。この形式はサイト全体で一貫しているため、これが最善の方法かもしれません。しかし、すべての提案が他のいくつかの点で役に立ちました。改めて皆さんに感謝します。
解決
常にその形式になることがわかっている場合、strtotime はそれを Unix タイムスタンプに直接変換します。
strtotime($_POST['app_date']);
ひーっ!
他のヒント
を見てください。 mktime() 関数。これを正規表現と組み合わせるか、 strtotime(), 、それを手に入れることができます。
if ( ! preg_match('#\d{2}/\d{2}/\d{4}#', $_POST['date']) ) {
// complain about invalid input
}
list($m, $d, $y) = explode('/', $_POST['date']);
$timestamp = mktime(0, 0, 0, $m, $d, $y);
dd、mm、yyyy を個別の変数として mktime に送信する必要があります。$epochold2 の値を、mktime には無効な 1 つの文字列として受け取ります。
最善の策は、前に述べたように strtotime を使用するか、Ant P のアドバイスに従って mktime を使用することです。
strtotime() ほぼすべての日付形式を解析し、Unix タイムスタンプを返します。あなたがしなければならないのは、日付/時刻文字列を渡すことだけです。
$unix_time = strtotime($_POST['date']);
if($unix_time < 0) {
//error case
}
else {
//value OK!
}
上で見られるように、これを入力の検証に使用することもできます。ユーザーが 02/31/2008 のような日付を入力すると、-1 が返されます。