14

Unix タイムスタンプがあると仮定すると、そのタイムスタンプが昨日の時刻であるかどうかを確認する簡単かつ/またはエレガントな方法は何でしょうか?

私は主に Javascript、PHP、または C# でのソリューションを探していますが、疑似コードや言語に依存しないソリューション (もしあれば) も歓迎します。

4

11 に答える 11

23

C# では、次のように使用できます。

bool isYesterday = DateTime.Today - time.Date == TimeSpan.FromDays(1);

于 2010-07-09T11:02:17.630 に答える
11

これは C# で使用できます。

bool isYesterday = (dateToCheck.Date.AddDays(1) == DateTime.Now.Date);
于 2010-07-09T11:25:44.500 に答える
10

PHP:

$isYesterday = date('Ymd', $timestamp) == date('Ymd', strtotime('yesterday'));
于 2010-07-09T11:39:16.760 に答える
5

疑似コードでタイムスタンプを比較するには:

  1. 現在の Unix タイムスタンプを取得する
  2. 取得したタイムスタンプを日付に変換する
  3. 日付から 1 日を引く
  4. テストするタイムスタンプを日付に変換する
  5. 両方の日付を比較します。それらが等しい場合、テストされたタイムスタンプは昨日でした。

結果をユーザーに表示する場合は、タイムゾーンに注意してください。私にとっては、2010 年 7 月 9 日の 13:39 です。14 時間前のタイムスタンプは昨日です。しかし、現在 15:39 である別のタイムゾーンにいる人にとっては、14 時間前は昨日ではありません!

別の問題は、システムの時刻/日付の設定が間違っている可能性があります。たとえば、JavaScript を使用していて、訪問者の PC のシステム時刻が間違っていると、プログラムが間違った結論を出す可能性があります。正しい答えを得ることが不可欠な場合は、既知のソースから正確な時刻で現在の時刻を取得します。

于 2010-07-09T11:40:20.987 に答える
2

これはオプションのDateTimeZoneオブジェクトを受け入れます。指定されていない場合は、現在設定されているデフォルトのタイムゾーンが使用されます。

<?php
function isYesterday($timestamp, $timezone = null) {
    $t = new DateTime(null, $timezone);
    $t->setTimestamp($timestamp);
    $t->setTime(0,0);
    $yesterday = new DateTime("now", $timezone);
    $yesterday->setTime(0,0);
    $yesterday = $yesterday->sub(new DateInterval('P1D'));

    return $t == $yesterday;
}
于 2010-07-09T11:09:59.553 に答える
2

別の C# の例:

bool isYesterday = DateTime.Now.Date.AddDays(-1) == dateToCheck.Date;
于 2010-07-09T11:11:32.970 に答える
2

コード:

static class ExtensionMethods
{
    private static readonly DateTime UnixStart = new DateTime(1970, 1, 1, 0, 0, 0, 0);;

    public static bool IsYesterday(this int unixTime)
    {
        DateTime convertedTime = UnixStart.AddSeconds(unixTime);
        return convertedTime.Date == DateTime.Now.AddDays(-1).Date;
    }

    public static bool IsYesterday(this DateTime date)
    {
        return date.Date == DateTime.Now.AddDays(-1).Date;
    }
}

例:

public class Examples
{
    public void Tests()
    {
        if (1278677571.IsYesterday()) System.Console.WriteLine("Is yesterday");

        DateTime aDate = new DateTime(2010, 12, 31);
        if (aDate.IsYesterday()) System.Console.WriteLine("Is yesterday");
    }
}
于 2010-07-09T11:14:11.923 に答える
1

JavaScript では、次のように記述できます。

var someDate = new Date(2010, 6, 9);
Date.yesterday.date == someDate.date // true

不必要な実装の詳細は省きましたが、可能です。わかりました、そこに行きます:)

(function() {
    function date(d) {
        var year = d.getFullYear();
        var month = d.getMonth();
        var day = d.getDate();
        return new Date(year, month, day);
    }

    Object.defineProperty(Date, 'yesterday', {
        enumerable: true,
        configurable: false,
        get: function() {
            var today = new Date();
            var millisecondsInADay = 86400000;
            var yesterday = new Date(today - millisecondsInADay);
            return yesterday;
        },
        set: undefined
    });​​​​​​​​

    Object.defineProperty(Date.prototype, 'date', {
        enumerable: true,
        configurable: true,
        get: function() {
            return date(this).valueOf();
        },
        set: undefined
    });
})();
于 2010-07-10T02:32:31.787 に答える
-1

この関数を試してみることができます。

public bool IsFromYesterday(long unixTime) {
    DateTime convertedTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    convertedTime.AddSeconds(unixTime);

    DateTime rightNow = DateTime.Now;

    DateTime startOfToday = DateTime.Today;
    DateTime startOfYesterday = startOfToday - new TimeSpan(1, 0, 0, 0);

    if (convertedTime > startOfYesterday && convertedTime < rightNow)
        return true;
    else
        return false;
 }
于 2010-07-09T11:09:42.307 に答える