优雅地检查给定日期是否是昨天

时间:2010-07-09 10:53:34

标签: c# php javascript language-agnostic unix-timestamp

假设您有一个Unix时间戳,那么检查该时间戳是否是昨天某个时间的简单和/或优雅的方法是什么?

我主要在Javascript,PHP或C#中寻找解决方案,但也欢迎伪代码和语言无关的解决方案(如果有的话)。

11 个答案:

答案 0 :(得分:19)

在C#中你可以使用它:

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

答案 1 :(得分:8)

PHP:

$isYesterday = date('Ymd', $timestamp) == date('Ymd', strtotime('yesterday'));

答案 2 :(得分:5)

在伪代码中,比较时间戳:

  1. 获取当前的Unix时间戳
  2. 将检索到的时间戳转换为日期
  3. 从日期减去1天
  4. 将时间戳转换为测试日期
  5. 比较两个日期。如果它们相等,则测试的时间戳是昨天。
  6. 如果向用户显示结果,请注意时区。对我而言,现在是2010年7月9日13:39。我的14小时前的时间戳是昨天。但对于处于不同时区的人来说,现在是15:39,14小时前不是昨天!

    另一个问题可能是时间/日期设置错误的系统。例如,如果您使用JavaScript并且访问者PC的系统时间错误,则该程序可能会得出错误的结论。如果获得正确答案至关重要,请使用正确的时间从已知来源检索当前时间。

答案 3 :(得分:4)

您可以在C#中使用它:

bool isYesterday = (dateToCheck.Date.AddDays(1) == DateTime.Now.Date);

答案 4 :(得分:3)

使用Pharo / Squeak的Smalltalk中的示例

(Date year: 2014 month: 4 day: 24) = Date yesterday

答案 5 :(得分: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;
}

答案 6 :(得分:2)

另一个C#示例:

bool isYesterday = DateTime.Now.Date.AddDays(-1) == dateToCheck.Date;

答案 7 :(得分: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");
    }
}

答案 8 :(得分:1)

在JavaScript中,您可以编写

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

遗漏了不必要的实施细节,但这是可能的。好的,there ya go:)

(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
    });
})();

答案 9 :(得分:1)

C#

    TimeSpan difference = DateTime.Now.Date - olderDate.Date;
    bool isYesterday = difference.TotalDays == 1;

答案 10 :(得分:-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;
 }