タイムスタンプ データ型は、「2013 年 1 月 17 日木曜日、午前 11 時 47 分 49 秒」という日付形式を取り込んだり保存したりできませんが、クライアントがその形式を好むため、この形式を db に保存したいと考えています。varchar または text を使用して保存できますが、これらのデータ型では TIMESTAMPDIFF 関数を使用して数分の計算を行うことができません。何か助けてください:
4 に答える
その形式のみが必要な場合は、フィールドのデータ型をVARCHARに変更しますが、DATETIME / TIMESTAMPとして保存してから、表示中にphpのDATE形式を使用して希望どおりに表示することをお勧めします。
格納されている形式は実数です。表示する形式は、そこから計算する必要があります。
ここに小さなサンプルがあります: http://www.plus2net.com/php_tutorial/php_date_time.php
あなたが説明した保存の問題は、実行せずにデコードするのが難しい長い文字列の代わりに、UNIX タイムスタンプ (INT)、ISO8601 (2013-01-17T19:47:49Z)、または DATETIME (すべてを UTC に設定してください) を使用することで解決できます。タイムゾーンと DST の問題に。
インターフェイスに日付またはタイムスタンプを表示する場合にのみ、必要なタイムゾーンとフォーマットに変換します。唯一のインターフェースがブラウザーである場合は、javascript の Date オブジェクトを使用して現地時間に変換します (任意の形式で)。
MySQL クエリの例:
SELECT UNIX_TIMESTAMP(`datetime_stsuff`) FROM `whatever` LIMIT 1
また
SELECT `int_unixtimestamp_seconds` FROM `whatever` LIMIT 1
Javascript の例:
var objDateFromDatabase=new Date(<?php echo json_encode($nUnixTimestampFromDB);?>*1000);
また
//note that older browsers don't support the Z suffix ("Zulu time" (GMT or UTC)) so use +00:00 instead (2012-01-01T12:34:56+00:00).
var objDateFromDatabase=new Date(<?php echo json_encode($strISO8601TimestampFromDB);?>*1000);
クライアントの希望に合わせてフォーマットするために使用できるメソッドについては、 MDN Date オブジェクトのドキュメントを参照してください。キーワード UTC を含まないメソッドは、ブラウザーのタイムゾーン (OS で構成されたタイムゾーン) に既に変換された値を返すため、わざわざユーザーにタイムゾーンを尋ねる必要はありません。
タイムスタンプ値をそのまま保存する必要があります-TIMESTAMP形式。
DATE_FORMAT関数を使用して、値をフォーマットします。たとえば、-
SELECT DATE_FORMAT(column1, '%W %M %Y') FROM table1;