1

タイトルにあるように、strtotime、Zend Framework、またはPEARパッケージを使用せずに、2つの日付(具体的には現在と過去の日付)の差(秒単位)を取得したいと思います。

私は私の理由の詳細に立ち入りたくありませんが、その要点は私が非常に古い日付で作業しているということです(そして私は古いことを意味します、私は西暦0年より前に話している)。

返される結果は、指定されたテキストのタイムスタンプの2番目まで非常に正確であることが望ましいです。関数を呼び出す形式は次のようになります。

$bar = foo("YYYY-MM-DD HH:MM:SS", "AD"); // Where AD is Anno Domini 
$baz = foo("YYYY-MM-DD HH:MM:SS", "BC"); // Where BC is Before Christ

次の特徴を備えた作品を提供する最初の人:

  • 読みやすさの高さ
  • 魔法なし(三項演算子など)

彼らの答えは賛成票を投じられ、受け入れられます。それらの名前は、それらのコードを使用するソースファイルのヘッダーにクレジットされます。

編集(Re:名声):

ヘッダーに名前がクレジットされているのは見栄えが悪く、編集できると誰かが言った。私が欲しい機能を利用するソースファイルのヘッダーについて話している。これは「名声」についてではありません。クレジットが必要な場合はクレジットを付与する必要があり、誰が作品を作成したかについて嘘をつく必要はありません。

編集(Re:正確さ):

「メッセージの手紙」をできる限り守りたいという以外の理由はありません。

編集(Re:マジック):

魔法は人によって異なります。三項演算子に関しては、私があなたの意見を尊重するので、私の意見を尊重してください。ありがとうございました。

編集(Re:古い日付と1秒の精度):

歴史の学生として、それは私には理にかなっています。「1秒の精度」に対する要望は絶対的なものではありません。完璧は達成可能ですが、必須ではありません。

4

4 に答える 4

2

各日時を部分(年、月、日付、時、分、秒)に分割することをお勧めします。次に、各部分で、最も多いものから最近のものを引いたものの基本的な合計を行います(BCの日付は事実上負の数であることを忘れないでください)。

あなたはそれを絶対的に正しくすることは決してないでしょう。うるう年を考慮する必要があります。1世紀がうるう年であるかどうか、グレゴリオ暦とユリウス暦の日付の切り替えなどです。

さらに、制限と高精度の要件についてのあなたの理由を知りたいです!

于 2010-01-14T22:46:43.490 に答える
1

そのようなすべての問題については、カレンダー計算(Google)を参照してください。

ああ、西暦0年はありませんでした。カレンダーは、紀元前1年から西暦1年になりました。つまり、現代の西洋人は、世界のほとんどが他のシステムを使用していたときに、そのようにカレンダーを定義しています。

または、このようなオンライン計算機を呼び出して、時間を大幅に節約します。

于 2010-01-14T23:31:47.203 に答える
1

一部の言語とデータベースは日付演算を実行しますが、実行しないものもあります。日付をデータベースに保存する場合は、postgresを試してください:

pg=> SELECT now() - 'January 8, 52 BC'::DATE;
-----------------------------
 754835 days 20:27:31.223035

DBを使用しない場合は、もう少し問題が発生します。PHPの日付演算は...まあ、私はそれについて話したくありません。Pythonは非常に優れていますが、紀元前1年から始まります。

あなたはあなた自身を転がさなければならないかもしれません...

于 2015-09-09T20:22:14.030 に答える
0

タイムスタンプを引いてみませんか?

mktime(16,59,0,8,7,2001) - mktime(16,59,0,8,7,2000)=それらの間の秒

于 2010-01-15T18:47:02.250 に答える