2012-01-13 16 views
12

Quiero una lógica si $ due es igual a ninguna fecha, entonces quiero datos comenzando con 2000. Mi código a continuación no está funcionando.

if($due == '0000-00-00 00:00:00'){ 
    $due = strtotime('2000-00-00 00:00:00'); 
} 
+1

Proporcione la salida de 'var_dump ($ due);' – Wrikken

+2

¿De dónde viene esta fecha? – webbiedave

+0

Si ha recuperado ese valor de una base de datos, puede ser mejor que realice esta lógica en su consulta. a menos que, es decir, tenga acciones adicionales para realizar dentro del 'if()' –

Respuesta

25

Si va a guardar strtotime() en $ debido, a continuación, es necesario comparar de esa manera, también

if($due == strtotime('0000-00-00 00:00:00')){ 
    $due = strtotime('2000-00-00 00:00:00'); 
} 

o, más simplemente

if($due == 0){ 
    $due = strtotime('2000-00-00 00:00:00'); 
} 

pero si $ debido viene de su base de datos como una cadena, le gustaría strtotime():

$due = strtotime($due); 
if($due == 0){ 
    $due = strtotime('2000-00-00 00:00:00'); 
} 

Sin embargo, tenga en cuenta las zonas horarias. Es decir, strtotime ('0000-00-00 00:00:00 UTC')! = Strtotime ('0000-00-00 00:00:00 EST'). Esto también podría romper tu comparación.

+5

strtotime ('0000-00-00 00:00:00') puede devolver menos valor, nulo, falso depende de la versión de PHP – XuDing

1

Debe asegurarse de estar comparando los valores en el mismo formato. Con lo que tiene actualmente, una de tres cosas sucederá:

  • Si $due es un int, la cadena que se está comparando con 0000-00-00 00:00:00 se convertirá en un int, lo que resultará en 0 y $due habrá comparado con 0. Esto solo dará como resultado una coincidencia si es $due === 0.
  • Si $due es una bool, la cadena se convierte en un bool, lo que resultará en TRUE, y sólo se obtendrá un partido si $due === TRUE.
  • Si $due es de cualquier otro tipo, se convertirá en una cadena y los dos se compararán como cadenas. Solo obtendrá una coincidencia si $due === '0000-00-00 00:00:00'.

Si dijera que probablemente necesite comparar los valores como enteros. Esto significa que debe pasar cadenas a través del strtotime(), incluido $due, si se trata de una cadena. Como no muestra un valor de ejemplo de $due, no puedo proporcionar un código de trabajo exacto.

0

strtotime(YourDate) != NULL funciona bien también.

Estaba trabajando en una sección DOB y DOM (fecha de matrimonio) de una base de datos. Parece que el valor predeterminado NULL guardó una fecha como 0000-00-00 Lo cual es algo estúpido para ser honesto.

O tal vez fue mi estupidez convertir el campo en un campo de FECHA en lugar de hacerlo un VARCHAR y mantener el valor STRTOTIME allí.

<?php 
    if(strtotime($dates->dom) != NULL) 
    { 
     echo '<a href="' . base_url() . 'dates/dom/' . $dates->dom . '">' . date('j F, Y',strtotime($dates->dom)) . '</a>'; 
    } 
    else 
    { 
     print 'Not Listed Yet'; 
    } ?></strong> 
0

me gustaría sugerir forma más simple

if(!$due) 
     $due = strtotime('2000-00-00 00:00:00'); 
0

Aquí está la solución para comprobar si el campo de fecha y hora en la base de datos (MySQL) es nulo o '0000-00-00 00:00:00'

seleccionar todos con starttime es nulo o '0000-00-00 00:00:00' y endtime no es (null o '0000-00-00 00:00:00')

Al final de la base de datos

select * from table where IFNULL(MONTH(starttime),0) >= 1 and IFNULL(MONTH(endtime),0) < 1; 

en php final

if((int)$starttime && !(int)$endtime){ /// } 
0

Sé que esto es una vieja pregunta, pero esta respuesta puede ayudar a alguien

strtotime devuelve una marca de tiempo en caso de éxito, FALSE de lo contrario.

$test = strtotime($due); 
$due = (!$test || $test < 0) ? '2000-00-00 00:00:00' : $due; 

unset($test); 

respetos.

0

No sé por qué strtotime no funcionó correctamente para mí. Probablemente sea por la zona horaria y otras cosas.

Como siempre las expresiones regulares de lujo funcionan como un encanto. ¡Soy de alguna manera adicto a eso!

if(preg_match("/0{4}/" , $dbDateField)) 
{ 
    // no its not acceptable 
} 
else 
{ 
    //ok 
}