繁体   English   中英

如何仅将时间(以字符串形式输入)转换为UTC时间格式而不使用整个日期?

[英]How to convert only time (type as string) into UTC time format without using the entire date?

我在当地时间12 am-11:30pm有一个下拉选项,其中包含当地时间:

<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是一个react-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

现在,我不确定如何在没有实际日期的情况下转换时间。

任何想法如何解决这个问题?

这是一种方法。 将偏移量计算为本地时间,然后相应地调整小时:

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

在将用户选择的时间从本地时间转换为UTC之前,您需要获取用户选择的日期作为上下文。 然后,只需使用用户选择的日期和时间创建Date对象,以便可以使用getUTCHoursgetUTCMinutes检索UTC时间部分。

下面是一个带有任意输入日期和时间的示例(您只需从输入中选择用户即可获取inputDateinputHour值)。 另外,请注意,您可能需要根据日期选择器控件产生的数据格式来调整如何处理输入日期。

 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(/[az]+/i); ap = ap.toLowerCase() if (ap === 'pm') { hh = hh < 12 ? hh + 12 : 0; } date.setHours(hh, mm); let utc = getUTCTime(date); console.log(utc); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM