2
respostas

DATA - "Date.now()"

Bom dia gostaria de exibir data atual e hora atual formatado no campo data, mas não estou conseguindo o retorno que aparece no console é este:

Uncaught Error: Deve estar no formato aaaa-mm-dd
    at Function.paraData (DateConverter.js:12)
    at RegistroController._criaRegistro (RegistroController.js:31)
    at RegistroController.adiciona (RegistroController.js:15)

index.html

<form class="form">

        <div class="form-group">
            <!--value="Date.now()"-->
            <input type="hidden" id="data" class="form-control" autofocus />
        </div>
         <div class="form-group">
            <label for="nome">Nome</label> 
            <input type="text" id="nome" class="form-control" autofocus />
        </div>

        <div class="form-group">
            <label for="exampleFormControlSelect1">Tipo de Documento</label>
            <select class="form-control" id="tipo_documento">
                <option value="rg">RG</option>
                <option value="cpf">CPF</option>
                <option value="outros">OUTROS</option>
            </select>
        </div>

        <div class="form-group">
            <label for="documento">Número do Documento</label>
            <input id="numero_documento" type="number" class="form-control" value="0" />
        </div>

        <button class="btn btn-primary" type="submit">Incluir</button>
    </form>

    <div class="text-center">
        <button id="botao-importa" class="btn btn-primary text-center" type="button">
            Importar Movimento
        </button>
        <button id="botao-apaga" class="btn btn-primary text-center" type="button">
            Apagar
        </button>
    </div>
    <br>
    <br>

    <table class="table table-hover table-bordered">
        <thead>
            <tr>
                <th>DATA/Hora</th>
                <th>NOME</th>
                <th>TIPO DOCUMENTO</th>
                <th>NUMERO DOCUMENTO</th>

            </tr>
        </thead>

        <tbody>
        </tbody>

        <tfoot>
        </tfoot>
    </table>

    <script src="app/domain/registro/Registro.js"></script>
    <script src="app/controllers/RegistroController.js"></script>
    <script src="app/ui/converters/DateConverter.js"></script>
    <script src="app/domain/registro/Registros.js"></script>
    <script src="app/app.js"></script>

</body>

classe RegistroController onde adiciono as informações e faço a exibição:

class RegistroController {

    constructor() {
        let $ = document.querySelector.bind(document);
        this._inputData = $('#data');
        this._inputNome = $('#nome');
        this._inputTipo_documento = $('#tipo_documento');
        this._inputNumero_documento = $('#numero_documento');
        this._registros = new Registros();
    }

    adiciona(event) {

        event.preventDefault();
<!--linha 15-->
        this._registros.adiciona(this._criaRegistro());
        console.log(this._registros);
        this._limpaFormulario();
    }

    _limpaFormulario() {
        this._inputData.value = '';
        this._inputNome.value = '';
        this._inputTipo_documento.value = '';
        this._inputNumero_documento.value = '';
        this._inputData.focus();
    }

    _criaRegistro() {
        // retorna uma instância de negociação
        return new Registro(
<!--linha 31-->
            DateConverter.paraData(this._inputData.value),
            this._inputNome.value,
            this._inputTipo_documento.value,
            parseFloat(this._inputNumero_documento.value)
        );
    }
}

DateConverter

class DateConverter {

    constructor() {
        throw new Error('Esta classe não pode ser instanciada');
    }

    static paraTexto(data) {
        return `${data.getDate()}/${data.getMonth() + 1}/${data.getFullYear()}`;
    }
    static paraData(texto) {
        if (!/^\d{4}-\d{2}-\d{2}$/.test(texto))
<!--linha 12"-->
            throw new Error('Deve estar no formato aaaa-mm-dd');
        return new Date(...texto.split('-').map((item, indice) =>item - indice % 2));
    }
}
2 respostas

Sergio, bom dia!

Um bom caminho seria pegar a data a partir do momento que o usuário apertar o botão de submeter, e só aí você setar um valor para o input data, pois o usando o "Date.now()" ele vai colocar um texto escrito isso e não a data real.

Espero ter ajudado e bons estudos!

Oi Felipe obrigado pelo seu retorno. Eu retirei o value e deixe somente o id="data" e o que eu envio para o RegistroController ou melhor como enviar para o adiciona uma data formatada do dia e hora atual? Voce poderia me dar um exemplo?