12

日付/時刻を MSSQL データベースに保存する必要がある PHP アプリケーションを計画しています。(好奇心旺盛な方のために説明すると、これはカレンダー アプリケーションです。) この情報を保存するのに推奨される形式は何ですか?

MSSQL には独自の datetime データ型があり、データベース自体で適切に機能し、非常に読みやすくなっています。ただし、datetime 値を PHP の優先フォーマットである UNIX タイムスタンプに変換する MSSQL 関数はありません。これにより、PHP での使用が少し難しくなります。UNIX タイムスタンプは、PHP が好むものであるため魅力的ですが、確かにそれほど読みやすくはなく、データを操作するための優れた組み込みの MSSQL 関数がたくさんありません。

この情報を datetime データ型、UNIX タイムスタンプ (int、bigint、または varchar データ型) として保存するか、両方の形式を並べて保存しますか、それともまったく別の形式で保存しますか?

4

3 に答える 3

13

日付を MS-SQL 形式で保存して、T-SQL の日付操作関数を最大限に活用できるようにします。読みやすく書きやすい

SELECT * FROM Foo
WHERE DateDiff(d,field1,now()) < 1

整数を操作して同等の操作を実行しようとするよりも

MsSQL の日付を UNIX タイムスタンプに変換するには、dateDiff を使用します。

SELECT DATEDIFF(s,'1970-01-01 00:00:00',fieldName) as fieldNameTS
FROM TableName
WHERE fieldName between '10/1/2008' and '10/31/2008'

Unix タイムスタンプを MsSQL 日付に変換するには、PHP で次のいずれかを実行できます。

$msSQLDate = date("Y-m-d H:i:s", $unixDate );

またはMsSQLで

INSERT INTO TableName ( 
  fieldName
) VALUES (
  DATEADD(s,'1970-01-01 00:00:00', ? ) 
) 

パラメータ 1 は int($unixDate) です

于 2008-10-22T20:51:57.700 に答える
5

dbネイティブタイプのdbエンジンのすべての日付に対して私が行うのと同じことをお勧めします。(日付時刻)

phpに挿入するには、「YYYY-MM-DD HH:MM:SS」を使用してください。date('Y-m-d H:i:s', $myTimeStampInSeconds);

-以下のコメントに応じて編集してください-

  1. 選択した列に使用できます$timestamp = strtotime( $yourColumnValue );
  2. SQLを使用して、DATEADD()などのSQL日付/時刻関数を使用してレコードを比較できるため、データベースのネイティブ形式で保存することをお勧めします。
于 2008-10-22T20:36:44.847 に答える
3

みなさん、こんにちは。

はい、それが最善の方法かもしれません。日付をデータベースに保存します。日付はデータベース形式を取り、必要に応じてフォーマットできます

しかし、ISO が開発した国際日付形式、つまり ISO 8601 には別の解決策があります。

ISO (ISO 8601) によって定義された国際形式は、次のように数値の日付システムを定義することによって、すべての日付の問題に対処しようとします: YYYY-MM-DD ここで

YYYY は年 [すべての数字、つまり 2100] MM は月 [01 (1 月) から 12 (12 月)] DD は日 [01 から 31] (月によって異なります) :P

数値の日付を使用すると、読みやすさと使いやすさに関していくつかの落とし穴があり、完全ではありません.しかし、ISO 日付形式は、普遍的に (そして正確に) 理解できる日付表現のための最良の選択です.

この形式は、タイムゾーン情報とともに正確な日付と時刻を表すためにも使用できることに注意してください。

ISO 8601:2000 に関する詳細情報はこちら

http://www.iso.org/iso/support/faqs/faqs_widely_used_standards/widely_used_standards_other/date_and_time_format.htm

これ以上…バイバイ

于 2008-10-23T10:52:18.940 に答える