Сложите строковые переменные даты и времени вместе - PullRequest
0 голосов
/ 04 августа 2020

Как мне объединить эти переменные в моем коде:

var date1 = "13:38";
var date2 = "2019-05-14T00:00:00"

Я хочу добавить время от date1 до date2, поэтому результат должен быть «2019-05-14T13: 38 : 00 "

Ответы [ 2 ]

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

Непонятно, что вы пытаетесь сделать. Если метка времени и даты всегда имеет время 00:00:00, и вы просто хотите обновить компонент времени, вы можете сделать это в виде строки.

Начиная с "2019-05-14T00: 00: 00 "не имеет смещения, он должен анализироваться как локальный, поэтому будет представлять разные моменты времени для каждого другого местоположения с другим смещением. Если он должен быть проанализирован как UT C, укажите это в OP. В любом случае это довольно просто go, вам просто нужно прояснить, как с этим следует обращаться.

Я допустил дополнительный компонент секунд.

var date1 = "13:38";
var date2 = "2019-05-14T00:00:00";

let [h, m, s] = date1.split(':');

console.log(date2.substring(0,11) + h + ':' + m + ':' + (s||'00'));

Однако, если временная метка даты и времени также имеет ненулевой компонент времени и вам нужно добавить время, объект Date может облегчить жизнь:

// Parse ISO 8601 timestamp in YYYY-MM-DDTHH:mm:ss format
// Assumes no offset, parses as local
function parseDateTime(dt) {
  let [Y, M, D, h, m, s] = dt.split(/\D/);
  return new Date(Y, M-1, D, h, m, s); 
}

// Add time in hh:mm[:ss] format to a date
// Returns a new date, doesn't modify date passed in
function addTime(date, time) {
  let [h, m, s] = time.split(/\D/);
  let d = new Date(+date);
  d.setHours(d.getHours() + +h, 
             d.getMinutes() + +m,
             d.getSeconds() + +m);
  return d; 
}

let date1 = "13:38";
let date2 = "2019-05-14T03:42:28";

let d = parseDateTime(date2);
let e = addTime(d, date1);

// UTC timestamp in ISO 8601 format
console.log(e.toISOString());

Обратите внимание, что во втором примере отображаемое значение использует встроенный метод toISOString , который сдвигает смещение на UT C (+0 ). Если вам нужен формат ISO, но в местном часовом поясе, вы можете вручную отформатировать строку. Есть много вопросов и ответов о том, как это сделать.

Есть также множество библиотек, которые могут помочь. Поскольку объект Date не сильно изменился за последние 20 лет, все, что было в течение некоторого времени, должно быть в порядке.

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

Вам нужно будет проанализировать первую временную привязку и построить на ее основе новый объект даты. Вы должны создать объект UT C и передать его в конструктор.

Для второй строки даты вам нужно будет добавить токен Zulu в конец, чтобы пожертвовать UT C time и сделайте его совместимым с ISO 8601.

После того, как у вас есть два объекта даты, обновите минуты и часы второго объекта даты, потому что он уже хранит информацию о дате.

const date1 = "13:38";
const date2 = "2019-05-14T00:00:00";

const dateObj1 = (tokens =>
  new Date(Date.UTC(0, 0, 0, tokens[0], tokens[1])))
(date1.split(':'));

const dateObj2 = new Date(date2 + 'Z');

dateObj2.setUTCMinutes(dateObj2.getUTCMinutes() + dateObj1.getUTCMinutes());
dateObj2.setUTCHours(dateObj2.getUTCHours() + dateObj1.getUTCHours());

console.log(dateObj2.toISOString().substring(0, 19)); // 2019-05-14T13:38:00

Если вы хотите сделать это в Moment, вы можете попробовать следующее:

const date1 = "13:38";
const date2 = "2019-05-14T00:00:00";

const moment1 = moment.utc(date1, 'HH:mm');
const moment2 = moment.utc(date2)
  .add(moment1.minutes(), 'minutes')
  .add(moment1.hours(), 'hours')

console.log(moment2.format('YYYY-MM-DDTHH:mm:ss'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...