私のアプリケーションでは、GET パラメータに日付範囲が必要です。私は、2 つの Unix タイムスタンプを 1 つにエンコードして、URL パラメーターを効果的に短縮する天才的な方法があるに違いないと考えていました。
2 つのタイムスタンプの単純な CSV でうまくいくことはわかっていますが、ここでの目標は URL のサイズをできるだけ小さくすることです。
PS: これは、日付 (開始日) が 1 つしかない場合にも機能する必要があります。この場合、終了日は今日と見なされます。
私のアプリケーションでは、GET パラメータに日付範囲が必要です。私は、2 つの Unix タイムスタンプを 1 つにエンコードして、URL パラメーターを効果的に短縮する天才的な方法があるに違いないと考えていました。
2 つのタイムスタンプの単純な CSV でうまくいくことはわかっていますが、ここでの目標は URL のサイズをできるだけ小さくすることです。
PS: これは、日付 (開始日) が 1 つしかない場合にも機能する必要があります。この場合、終了日は今日と見なされます。
さて、ここにいくつかのアイデアがあります:
2 つのタイムスタンプが互いに近い可能性が高い場合は、それらを初回と差分のペアとして保存します。たとえば、今と明日のために、 を保存し1361666257,86400
ます。
タイムスタンプを基数 10 ではなく 16 進数 (基数 16) で保存します。例えば、512960d1
タイムスタンプが常に日付である場合は、86400 で割って残りを破棄することにより、秒ではなくエポックからの日数で保存します。たとえば、今日は 15760 日です。
および/またはこれらの 3 つすべてを組み合わせます。3d90,1
目標が URL のサイズをできるだけ小さくすることである場合は、独自の「タイムスタンプ」形式を考え出し、都合のよい粒度とオフセットを選択できます。
たとえば、渡す必要がある日付が通常、リクエストの現在の日付付近であり、時刻ではなく日付のみが必要な場合は、年からの秒数ではなく、経過日数を使用できます。 1970。これは UNIX タイムスタンプの定義です。
Unix タイムスタンプとこのバリアントを使用したランダムな日付範囲は次のようになります。
Date range: 2012-09-21 to 2013-01-10
Timestamp: 1348178400_1357772400
Days-ago: 156_45
UNIX タイムスタンプを使用する場合は 1970 年より前の日付、またはこの例のエンコーディングでは将来の日付にはマイナス記号が必要になるため、fromとto_
の部分を分けていたことに注意してください。-
これはほんの一例です。アプリケーションのニーズに基づいて、独自のエンコーディングを考え出す必要があります (そうでない場合もあります)。たとえば、日付範囲が通常小さい場合は、日付 + 差分としてエンコードできます。違いは、ニーズに応じて、日単位、月単位、または年単位である可能性があります。