Hora con un digito

Issue #24 resolved
Cristian Tala Sánchez repo owner created an issue

Revisar bug reportado de la hora cuando solo tiene un dígito.

Comments (12)

  1. Camilo Castro

    tal vez pueda ayudar. por favor explicar dónde ocurre. resultado esperado y resultado obtenido.

    gracias.

  2. Jose Rafael Pino Carrasquero

    Saludos. ¿tendrá que ver con este error? Lo vi esta mañana a propósito de una certificación de Transbank. Y probando esta tarde con una hora de dos dígitos, no escribió mal la hora (salvo la hora menos del servidor de Transbank) http://i.imgur.com/2BWKXso.jpg La hora sale 86:92.2

  3. Camilo Castro

    tengo este código para parsear la hora

    $transaction_time = substr($tbk_transaction_time[1], 0, 2) . ':' 
                                    . substr($tbk_transaction_time[1], 2, 2) . ':' 
                                    . substr($tbk_transaction_time[1], 4, 2);
    

    estoy buscando donde ubicar el archivo que contiene el código para formatear la hora.

  4. Camilo Castro

    templates/webpay_thankyou.php línea 22:

        $orden_hora = (substr($myOrderDetails["TBK_HORA_TRANSACCION"],0,2)+1).":".substr($myOrderDetails["TBK_HORA_TRANSACCION"],2,2).":".substr($myOrderDetails["TBK_HORA_TRANSACCION"],4,2);
    

    cambiado por

        $tbk_transaction_time = $myOrderDetails["TBK_HORA_TRANSACCION"];
        $orden_hora = substr($tbk_transaction_time, 0, 2) . ':' 
                                    . substr($tbk_transaction_time, 2, 2) . ':' 
                                    . substr($tbk_transaction_time, 4, 2);
    

    haciendo pruebas antes del pull request.

  5. Cristian Tala Sánchez reporter

    Hahaha acabo de ver todo esto. Gracias por el aporte, esperaré el pull rquest.

  6. sebastian orellana

    A mi me pasa lo mismo, según lo que veo en la DB, no se están guardando los 0 al inicio de la hora, tengo una hora guardada en la tabla wp_webpay como 807 pero en la bitácora de webpay aparece como 000807

  7. sebastian orellana

    Chicos hice 2 cambios para arreglar la hora, modifiqué la hora demás (+1) agregada en webpay_thankyou.php

    $orden_hora = (substr($myOrderDetails["TBK_HORA_TRANSACCION"],0,2)+1).":".substr($myOrderDetails["TBK_HORA_TRANSACCION"],2,2).":".substr($myOrderDetails["TBK_HORA_TRANSACCION"],4,2);
    

    por

    $orden_hora = (substr($myOrderDetails["TBK_HORA_TRANSACCION"],0,2)).":".substr($myOrderDetails["TBK_HORA_TRANSACCION"],2,2).":".substr($myOrderDetails["TBK_HORA_TRANSACCION"],4,2);
    

    En la DB cambié en la tabla wp_webpay el campo TBK_HORA_TRANSACCION de int(6) a char(6) ya que el int no acepta los ceros adelante como la hora 12:15:12am que en transbank sería 001512 y como int se guardaba erroneamente 1512 pero como char ahora se guarda correctamente 001512 y luego lo muestra 00:15:12

  8. hveis

    Me di cuenta del mismo error y tambien creo que el problema es porque la hora se guarda como INT en vez de un string que si permite los ceros adelante del numero entero.

    Hice un "arreglo" solo usando "if,elseif,else" que es francamente horrible pero funciona sin tener que modificar la tabla (no la modifique porque no sabia si afectaba a otra parte del funcionamiento del plugin).

    Me quedo de todas maneras con la solución de @seballero que mucho más simple y elegante

    Dejo el codigo abajo en caso de que sirva de algo (aunque lo dudo)

    //Hora
        //Por como se guarda la hora en la tabla (integer) se deben extraer los caracteres del string para que el formato de hora se vea correctamente
        //P.S: Solucion poco elegante y quizas un poco exagerada pero funciona
    
        //Si la compra es entre las 00:00:00-00:00:09hrs
        if(strlen($myOrderDetails["TBK_HORA_TRANSACCION"]) == 1) {
            $orden_hora = "00:00:0".substr($myOrderDetails["TBK_HORA_TRANSACCION"],0,1);
            }
        //Si la compra es entre 00:00:10-00:00:59hrs
        elseif(strlen($myOrderDetails["TBK_HORA_TRANSACCION"]) == 2) {
            $orden_hora = "00:00:".substr($myOrderDetails["TBK_HORA_TRANSACCION"],0,2);
            }
        //Si la compra es entre 00:01:00-00:09:59hrs
        elseif(strlen($myOrderDetails["TBK_HORA_TRANSACCION"]) == 3) {
            $orden_hora = "00:0".(substr($myOrderDetails["TBK_HORA_TRANSACCION"],0,1)).":".substr($myOrderDetails["TBK_HORA_TRANSACCION"],1,2);
            }
        //Si la compra es entre 00:10:00-00:59:59hrs    
        elseif(strlen($myOrderDetails["TBK_HORA_TRANSACCION"]) == 4) {
            $orden_hora = "00:".(substr($myOrderDetails["TBK_HORA_TRANSACCION"],0,2)).":".substr($myOrderDetails["TBK_HORA_TRANSACCION"],2,2)."".substr($myOrderDetails["TBK_HORA_TRANSACCION"],4,2);
        }
        //Si la compra es entre las 01:00:00-09:59:59hrs
        elseif(strlen($myOrderDetails["TBK_HORA_TRANSACCION"]) == 5) {
            $orden_hora = "0".(substr($myOrderDetails["TBK_HORA_TRANSACCION"],0,1)).":".substr($myOrderDetails["TBK_HORA_TRANSACCION"],1,2).":".substr($myOrderDetails["TBK_HORA_TRANSACCION"],3,2);
        }   
        //Si la compra es entre las 10:00:00-23:59:59hrs
        else {
            $orden_hora = (substr($myOrderDetails["TBK_HORA_TRANSACCION"],0,2)).":".substr($myOrderDetails["TBK_HORA_TRANSACCION"],2,2).":".substr($myOrderDetails["TBK_HORA_TRANSACCION"],4,2);
        }
    
  9. Camilo Castro

    la verdad no veo la necesidad de guardar la fecha y la hora de forma separada. creo que la fecha de transacción debiese ser guardada integramente como un string. y ser mostrada sin problemas en la página de éxito como:

    Fecha y Hora de Transacción: 11-11-2015 10:20:29 hrs

  10. Johnny J. Huirilef Millán

    Se debe cambiar como se almacena la hora a varchar(6) o char(6). y la linea que muestra la información en la pagina de cierre debe ser esta.

    $orden_hora = (substr($myOrderDetails["TBK_HORA_TRANSACCION"],0,-4)).":".substr($myOrderDetails["TBK_HORA_TRANSACCION"],-4,2).":".substr($myOrderDetails["TBK_HORA_TRANSACCION"],-2);
    
  11. Log in to comment