さまざまな期間に基づいて、変数に割り当てる正確なUnixタイムスタンプを作成しようとしています。これらのタイムスタンプ期間をどのように計算できるか考えていますか?
3 に答える
私はあなたに時間マニュアルを読むことを提案することしかできませんでした。
http://php.net/manual/en/function.time.php
今日から深夜まで->時間+分を取得し、マイナス24:00時間の計算を行い、http://php.net/manual/en/function.abs.phpを使用して値を正にします
他のすべてはhttp://php.net/manual/en/function.strtotime.phpを使用して解決できます
最悪の場合、UNIX時間に変換して差を取得すると、2月28/29日の問題のように、リープイヤーやその他の時間条件に注意を払うことなく、正確な出力が得られます。
あなたはこれをしたくないと言えますか?通常のUnixタイムスタンプを保存します-必要に応じてローカルタイムスタンプに変換します。
タイムゾーンが変更されたり、誰かが夏時間を移動したりすると、データは非常に高速になります。データがどれだけ正確であるかに応じて、うるう秒(さらにはうるう分)が発生する可能性があります。
タイムハンドリングコードは非常に複雑で/非常に/スマートです。
- リアルタイムスタンプを保存します。
- その期間の開始を示すタイムスタンプを保存します。
- 必要なときに減算します。
- あいまいなバグは避けてください。
私はPHPのDateTimeクラスの大きな支持者です。それらは、時間を扱うときに生じるフラストレーションの多くを軽減します。
このサンプルは、それをどのように使用するかを示しています。
<?php
header('Content-type: text/plain');
$today = new DateTime("today");
echo 'Today: ' . $today->format('Y-m-d H:i:s') . "\n";
echo 'Timestamp: ' . $today->getTimestamp() . "\n\n";
$thisweek = new DateTime("this week");
echo 'This Week: ' . $thisweek->format('Y-m-d') . "\n";
echo 'Timestamp: ' . $thisweek->getTimestamp() . "\n\n";
$thismonth = new DateTime("this month");
echo 'This Month: ' . $thismonth->format('Y-m') . "\n";
echo "Days this month: ", $thismonth->format('t') . "\n";
echo 'Timestamp: ' . $thismonth->getTimestamp() . "\n\n";
?>
DateTimeZoneクラスを利用することで、これを強化できます。