2010-07-09 15 views
10

Suponiendo que tiene una marca de tiempo de Unix, ¿cuál sería una manera fácil y/o elegante de verificar si esa marca de tiempo fue alguna hora de ayer?Verifique elegantemente si una fecha dada es ayer

Principalmente estoy buscando soluciones en Javascript, PHP o C#, pero las soluciones de pseudo código y de agnóstico de idioma (si hay) también son bienvenidas.

Respuesta

8

PHP:

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

En C# podría utilizar este:

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

+0

Eso sólo funciona si la marca de tiempo era exactamente a la medianoche. Editar: Funciona con <= though :) Edit 2: Ignore eso, esto funciona: P – Aistina

+3

No: las propiedades Today y Date devuelven solo la parte de fecha de la fecha, con la parte de tiempo siendo cero. Entonces debería funcionar bien. –

-1

Usted puede dar a esta función un tiro:

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; 
} 
+0

Por favor, edite para indicar en qué idioma se trata. – Jolta

2

Este acepta una DateTimeZone objeto opcional. Si no se proporciona, utiliza la zona horaria predeterminada establecida actualmente.

<?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; 
} 
2

Otro ejemplo de C#:

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

¿Por qué tan negativo? :-) Escribo eso como: 'bool isYesterday = dateToCheck.Date.AddDays (1) == DateTime.Today;' –

+2

@Omer Mor lol eso es solo mi pesimismo mostrando a través de;) – w69rdy

2

Código:

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

Ejemplos:

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"); 
    } 
} 
3

Se puede utilizar esta en C#:

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

En pseudocódigo, para comparar las marcas de tiempo:

  1. obtener la fecha Unix actual
  2. transformar la marca de tiempo recuperado en una fecha
  3. restar 1 día desde la fecha
  4. transforma la marca de tiempo para probar una fecha
  5. comparar ambas fechas. Si son iguales, la marca de tiempo probada fue ayer.

Tenga cuidado con las zonas horarias si muestra los resultados a un usuario. Para mí, ahora son las 13:39 del 9 de julio de 2010. Una marca de tiempo hace 14 horas para mí es ayer. ¡Pero para alguien en una zona horaria diferente donde ahora son las 15:39, hace 14 horas no fue ayer!

Otro problema pueden ser los sistemas con una configuración incorrecta de hora/fecha. Por ejemplo, si usa JavaScript y la hora del sistema de la PC de visitantes es incorrecta, el programa puede llegar a una conclusión incorrecta. Si es esencial obtener una respuesta correcta, recupere la hora actual de una fuente conocida con una hora correcta.

1

En JavaScript, podría escribir

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

dejado fuera los detalles de implementación innecesarias, pero es posible.Ok, 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 
    }); 
})(); 
3

Un ejemplo en Smalltalk usando Pharo/Squeak

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

C#

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