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 回答
3

Smalltalk 中使用 Pharo/Squeak 的示例

(Date year: 2014 month: 4 day: 24) = Date yesterday
于 2013-07-26T13:05:50.350 回答
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

C#

    TimeSpan difference = DateTime.Now.Date - olderDate.Date;
    bool isYesterday = difference.TotalDays == 1;
于 2017-11-06T13:39:40.157 回答
-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 回答