У меня есть варианты выпадающего меню с местным временем, начиная с 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
Теперь я не уверен, как я могу преобразовать время без фактической даты.
Любая идея, как это исправить?
Вам нужно будет получить выбранную пользователем дату в качестве контекста, прежде чем преобразовать выбранное пользователем время из локального в 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);
Вот один из способов. Вычислите смещение по местному времени, затем отрегулируйте часы соответственно:
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')}');