Как преобразовать только время (введите как строку) в формат времени UTC, не используя всю дату?

1

У меня есть варианты выпадающего меню с местным временем, начиная с 12 утра до 11:30 вечера:

<select> 
<option value="12:00am">12:00am</option>
<option value="12:30am"/>12:30am</option>
<option value="1:00am"/>1:00am</option>
<option value="1:30am"/>1:30am</option>
<option value="2:00am"/>2:00am</option>
.....
.....
.....
<option value="11:30pm">11:30pm</option>
</select>

<select> 
    <option value=this.getUTCVal("12:00am")>this.getUTCVal("12:00am")</option>
    .....
    .....
    .....
    <option value=this.getUTCVal("11:30pm")>this.getUTCVal("11:30pm")</option>
    </select>

эти значения находятся в массиве:

var arr=["12:00am","12:30am"....."11:30pm"];

Датчик даты, который позволяет выбрать дату:

DatePicker является реагируют-datepicker- https://www.npmjs.com/package/react-datepicker

<DatePicker
                        startDate={startDateVal}
                        endDate={endDateVal} />

Я бы хотел показать эквивалентное время UTC для всех значений. Поэтому я проверил ресурсы, и большинство из них использует стандартный формат преобразования с датой.

date = new Date(); 
var now_utc =  Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(),
 date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());

 return new Date(now_utc);

Однако у меня нет полной даты, и я могу передавать значения времени в качестве аргументов функции. Я старался:

getUTCVal(val) {
  Math.floor(new Date().getTime() / 1000) // which give me current time
}

Я также пробовал:

var datestring = "1:00";
new Date(datestring); //gives me invalid date

Теперь я не уверен, как я могу преобразовать время без фактической даты.

Любая идея, как это исправить?

  • 0
    Вы предполагаете, что временная строка соответствует текущему дню по местному времени?
  • 0
    вот в чем проблема, @JimB., может быть любая дата. текущая дата, прошедшая дата
Показать ещё 5 комментариев
Теги:
datetime
time
utc

2 ответа

1
Лучший ответ

Вам нужно будет получить выбранную пользователем дату в качестве контекста, прежде чем преобразовать выбранное пользователем время из локального в UTC. Затем нужно просто создать объект Date используя выбранные пользователем дату и время, чтобы вы могли получить части времени UTC с помощью getUTCHours и getUTCMinutes.

Ниже приведен пример с произвольной датой и временем ввода (вам просто нужно получить значения inputDate и inputHour при выборе пользователя из ваших входов). Кроме того, обратите внимание, что вам может потребоваться настроить обработку входной даты на основе формата данных, созданного вашим элементом управления выбора даты.

const inputDate = '2018-10-22';
const inputTime = '1:30PM';

const getUTCTime = (d) => {
  return d.getUTCHours() + ':' + d.getUTCMinutes() + ' UTC';
}

let [y, m, d] = inputDate.split('-').map(x => parseInt(x));
let date = new Date(y, m - 1, d);
let [hh, mm] = inputTime.match(/\d+/g).map(x => parseInt(x));
let [ap] = inputTime.match(/[a-z]+/i);

ap = ap.toLowerCase()
if (ap === 'pm') {
  hh = hh < 12 ? hh + 12 : 0;
}
date.setHours(hh, mm);

let utc = getUTCTime(date);
console.log(utc);
1

Вот один из способов. Вычислите смещение по местному времени, затем отрегулируйте часы соответственно:

const dateString="1:00pm";
const now = new Date();
const offset = now.getUTCHours() - now.getHours();

let hours = parseInt(dateString.split(':')[0]);
const minutes = parseInt(dateString.replace(/^.*:([0-9]*)[a-z]*$/, '$1'));
const pm = dateString.indexOf('pm') >= 0;

if (pm) hours += 12;
hours = (hours + offset) % 24;

console.log('${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}');

Ещё вопросы

Сообщество Overcoder
Наверх
Меню