Как преобразовать только время (введите как строку) в формат времени UTC, не используя всю дату? - PullRequest
0 голосов
/ 23 октября 2018

У меня есть варианты выпадающих с местным временем в 12:00 до 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

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

Есть идеи как это исправить?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Вам потребуется получить выбранную пользователем дату в качестве контекста, прежде чем преобразовать выбранное пользователем время из местного в 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('-');
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);
0 голосов
/ 23 октября 2018

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

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')}`);
...