Найдите разницу между сегодняшней датой и временем и другой датой и временем - PullRequest
2 голосов
/ 03 августа 2020

Я пытаюсь найти разницу в дате и времени между двумя датами (и временем). Я пытаюсь реализовать функцию обратного отсчета (до даты события), но при моем подходе возникают проблемы.

Примечание : некоторые из переменных, определенных ниже, находятся в HuBL, HuBL можно использовать в Javascript, если они находятся в одном файле.

Вот мой текущий подход:

1. Как я получаю данные и время

В HubSpot у меня есть таблица базы данных. В этой таблице у меня есть столбец типа date and time. Для справки, значение в этом поле следующее:

enter image description here

I've ran a for loop to obtain its date and time as separate variables (event_date is the column name in the database table):

{% for data in table_query %}
  {% set event_date    = data.event_date|datetimeformat('%B %e, %Y') %}
  {% set event_time    = data.event_date|datetimeformat('%H %M') %}
{% endfor %}

To see the datetimeformat parameters I've used - см. Документацию здесь

Выполнение {{ event_date }} печатает: 7 сентября 2020 г. Выполнение {{ event_time }} распечатывает: 11 59

2. Теперь, когда у меня есть дата и время в варах, я пытаюсь найти разницу

В герое. html:

{% for data in table_query %}
   {% set event_date    = data.event_date|datetimeformat('%B %e, %Y') %}
   {% set event_time    = data.event_date|datetimeformat('%H %M') %}
{% endfor %}


<script>

  var event_date = new Date('{{ event_date }}');
  var todays_date = new Date();


  function getDifferenceInDays(event_date, todays_date) {
    var diffInMs = Math.abs(todays_date - event_date);
    return diffInMs / (1000 * 60 * 60 * 24);
  }

  function getDifferenceInHours(event_date, todays_date) {
    var diffInMs = Math.abs(todays_date - event_date);
    return diffInMs / (1000 * 60 * 60);
  }

  function getDifferenceInMinutes(event_date, todays_date) {
    var diffInMs = Math.abs(todays_date - event_date);
    return diffInMs / (1000 * 60);
  }

  function getDifferenceInSeconds(event_date, todays_date) {
    var diffInMs = Math.abs(todays_date - event_date);
    return diffInMs / 1000;
  }

  console.log(getDifferenceInDays(event_date, todays_date));
</script>

Мои проблемы:

С указанным выше я получаю console.log из NaN. Я пытаюсь получить результаты в days, hours, minutes, seconds, потому что я делю его на таймер обратного отсчета до события.

Я полностью потерялся в как я смогу проверить время события - пытаясь получить как можно более точный таймер обратного отсчета, чтобы отсчет времени до начала события, но не уверен, как я могу это сделать

Примечание : Пометка twig тоже, так как синтаксис аналогичен HubL

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Ваш NaN исходит из предоставления строки в ваш конструктор даты, которая обернута вокруг вывода рендеринга вашего шаблона

var event_date = new Date('{{ event_date }}');
// should be
var event_date = new Date({{ event_date }});

Я думаю, что вам действительно нужно здесь просто использовать момент. js (https://momentjs.com/)

Вот простой пример разных дней. Документы моментов довольно обширны по длительности: https://momentjs.com/docs/# / durations /

var now  = "04/09/2013 15:00:00";
var then = "02/09/2013 14:20:30";

var ms = moment(now,"DD/MM/YYYY HH:mm:ss").diff(moment(then,"DD/MM/YYYY HH:mm:ss"));
var d = moment.duration(ms).asDays();
0 голосов
/ 03 августа 2020

Ваша проблема в event_data. вы получаете, возможно, строку рядом с целым числом. например, если вы жестко запрограммировали новую дату, вы получите ответ на консоли.

var event_date = new Date(2020, 08, 03, 12, 15, 30);
  var todays_date = new Date();


  function getDifferenceInDays(event_date, todays_date) {
    var diffInMs = Math.abs(todays_date - event_date);
    return diffInMs / (1000 * 60 * 60 * 24);
  }

  function getDifferenceInHours(event_date, todays_date) {
    var diffInMs = Math.abs(todays_date - event_date);
    return diffInMs / (1000 * 60 * 60);
  }

  function getDifferenceInMinutes(event_date, todays_date) {
    var diffInMs = Math.abs(todays_date - event_date);
    return diffInMs / (1000 * 60);
  }

  function getDifferenceInSeconds(event_date, todays_date) {
    var diffInMs = Math.abs(todays_date - event_date);
    return diffInMs / 1000;
  }

  console.log(getDifferenceInDays(event_date, todays_date));

https://codepen.io/Elnatan/pen/jOqNPMm (проверьте консоль)

...