Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Преобразовать данные в дату и время (https://javascript.ru/forum/jquery/74334-preobrazovat-dannye-v-datu-i-vremya.html)

Igordey 02.07.2018 15:02

Преобразовать данные в дату и время
 
Есть
<div id="checkSertificateContainer"></div>

В этот контейнер выводится данные в формате Unix времени из скрипта:
let val = contractInstance.checkSertificate(adreess1, address2).toString();
 $("#checkSertificateContainer").html(val);

Вопрос.
Каким образом данные в контейнере преобразовать в читабельный формат даты и времени?

Dilettante_Pro 02.07.2018 15:12

Igordey,
unix-формат - в секундах, JS - в миллисекундах, поэтому

new Date(val * 1000)

Igordey 02.07.2018 15:17

А куда прописать этот код?

Igordey 02.07.2018 15:26

Спасибо большое. Сообразил куда прописать.
$("#checkSertificateContainer").html(new Date(val * 1000));

Dilettante_Pro 02.07.2018 15:42

Igordey,
И как, работает?
По идее, нужно
let val = contractInstance.checkSertificate(adreess1, address2);
 $("#checkSertificateContainer").html((new Date(val * 1000)).toString());

Igordey 02.07.2018 15:48

Работает. Я прописал так
let val = contractInstance.checkSertificate(adreess1, address2).toString();
$("#checkSertificateContainer").html(new Date(val * 1000));

Получается работает так и так.
Спасибо большое.

Aetae 02.07.2018 16:16

Dilettante_Pro, не, val - по умолчанию string.
Igordey, а вот checkSertificate toString - это бессмыслено, т.к. * обратно в number его кидает.

Dilettante_Pro 02.07.2018 16:25

.toString() в вашем варианте - лишнее.

<div id = 'checkSertificateContainer'></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
   let val = 1530538138;
   $("#checkSertificateContainer").html(new Date(val * 1000));

</script>

Malleys 02.07.2018 19:29

Цитата:

Сообщение от Igordey (Сообщение 488817)
Каким образом данные в контейнере преобразовать в читабельный формат даты и времени?

Используйте класс Intl.DateTimeFormat

<div id="checkSertificateContainer"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>

const date = new Date(1530538138 * 1000);
$("#checkSertificateContainer").html(new Intl.DateTimeFormat("ru", {
  year: "numeric", month: "long", day: "numeric", weekday: "long",
  hour: "numeric", minute: "numeric", second: "numeric",
  hour12: false
}).format(date));

</script>


https://caniuse.com/#search=Intl

Igordey 08.07.2018 15:03

Вот тут развивая эту тему появилась задача. Как сделать чтобы нулевое значение даты не отражалась, а вместо нулевого значения, которое соответственно преобразуется в предложеных вариантах ответа в дату 1 января 1970 года, вывелось что-то типа "данные отсутствуют".
пробовал такой код
let val = contractInstance.checkSertificate(CoopAddess, member).toString();
  		$("#checkSertificateContainer") ('!=0').html(new Date(val * 1000));

после ввода данных ошибка:
TypeError: $(...) is not a function

рони 08.07.2018 15:19

Igordey,
$("#checkSertificateContainer").html(val ? new Date(val * 1000) : "данные отсутствуют");

Igordey 08.07.2018 15:43

Поправил как Вы сказали.
let val = contractInstance.checkSertificate(CoopAddess, member).toString();
  		$("#checkSertificateContainer").html(val ? new Date(val * 1000) : "Удостоверение отсутствует");

Однако результат:
Thu Jan 01 1970 03:00:00 GMT+0300 (MSK)
Где ошибаюсь?

Aetae 08.07.2018 16:40

0 .toString() -> '0'
Boolean('0') -> true //потому что не пустая строка
new Date('0' * 1000) -> Thu Jan 01 1970 03:00:00 GMT+0300 (MSK)
говорили же - .toString() не нужен.

Igordey 08.07.2018 18:32

Всё правильно, не пустая. Но как раз задача в том что бы при ответе, который выдает значение "0" вместо "Thu Jan 01 1970 03:00:00 GMT+0300 (MSK)" выдавал строку "Удостоверение отсутствует", а при значении больше "0" дату в читабельном формате.
Полный код JS такой:
$(document).ready(function() {
	    $("#check-form").submit(function(e){
        e.preventDefault();

        $('checkSertificateContainer').html('');
        $('#no-checkSertificateContainer').hide();
        let url = window.location.protocol+'//'+window.location.hostname+'/'+'1';
        certUrl = url;


        $('#checkSertificateContainer').load(certUrl, function(response, status, xhr) {

        	if ( status == "success" ) {
		let CoopAddess = $('#CoopAddess').val();
		let member = $('#member').val();
		let val = contractInstance.checkSertificate(CoopAddess, member).toString();
  		$("#checkSertificateContainer").html(val ? new Date(val * 1000) : "Удостоверение отсутствует");

рони 08.07.2018 18:56

Igordey,
:-?
Цитата:

Сообщение от Aetae
говорили же - .toString() не нужен.


рони 08.07.2018 18:57

Igordey,
или так :cray:
$("#checkSertificateContainer").html(+val ? new Date(val * 1000) : "Удостоверение отсутствует");

Igordey 08.07.2018 22:06

Понял. Поправил. Спасибо


Часовой пояс GMT +3, время: 09:06.