Javascript 如何将日期字符串分解或解析为单独的yy-mm-dd、hh和mm-am或pm
我试图从通过我们正在使用的API传递的日期字符串中提取小时、分钟、yy mm dd和if am或pm。正在尝试设置本地JS变量 我有一个通过API传递的字符串响应(Javascript 如何将日期字符串分解或解析为单独的yy-mm-dd、hh和mm-am或pm,javascript,Javascript,我试图从通过我们正在使用的API传递的日期字符串中提取小时、分钟、yy mm dd和if am或pm。正在尝试设置本地JS变量 我有一个通过API传递的字符串响应(2018-12-31T09:00:00-0600) 我需要向另一个API提交请求,但我需要将小时、分钟、日期和am/pm作为单独的变量传递 本地JS变量: var TK_send_date; //yy-mm-dd var TK_send_hour; //01-23 var TK_send_minute; // 00, 30
2018-12-31T09:00:00-0600
)
我需要向另一个API提交请求,但我需要将小时、分钟、日期和am/pm作为单独的变量传递
本地JS变量:
var TK_send_date; //yy-mm-dd
var TK_send_hour; //01-23
var TK_send_minute; // 00, 30
var TK_ampm; // AM or PM
API想要这个
someAPIFunction(hour, minutes, date, ampm);
==更新=========
这就是我所拥有的,而且只有一部分是有效的
function bookingSuccess(response) {
console.log("bookingSuccess function called");
TK_Response = response;
local_date = new Date(response.data.start); //2018-12-31T09:00:00-0600
TK_send_hour = local_date.getHours(); // is always 0
TK_send_hour = local_date.getMinutes(); // is always 0
TK_send_date = local_date.toISOString().split('T')[0]; // successfully gets the date yy-mm-dd
if(TK_send_hour < 12) {
TK_ampm = 'AM';
} else {
TK_ampm = 'PM';
}
}
功能预订成功(响应){
log(“调用bookingSuccess函数”);
TK_响应=响应;
local_date=新日期(response.data.start);//2018-12-31T09:00:00-0600
TK_send_hour=local_date.getHours();//始终为0
TK_send_hour=local_date.getMinutes();//始终为0
TK_send_date=local_date.toISOString().split('T')[0];//成功获取日期yy-mm-dd
如果(发送时间<12小时){
TK_ampm='AM';
}否则{
TK_ampm=‘PM’;
}
}
这是我能为你做的最好的了。这只是大量的格式化和方法调用
var today = new Date();
var am_or_pm = today.toLocaleString([], { hour:'numeric', hour12: true });
var TK_send_date = today.getFullYear()+'-'+(today.getMonth()+1)+'-'+today.getDate();
var TK_send_hour = today.getHours();
var TK_send_minute = today.getMinutes();
var TK_ampm = am_or_pm.slice(-2);
您的描述中缺少一些细节,例如如何处理时区。如果您知道时区,您的解决方案看起来还可以,除了您需要本地人的
var
,并且您正在第6行设置从分钟开始的小时数。因为您的第二个API需要AM/PM,我猜它也需要12小时的时间,所以您需要调整时间
如果您想要一个简单的时区解决方案,您可以使用从数据中提取所需字段,并在字典中返回它们
/* Parse date expected in format 2018-12-31T09:00:00-0600
@param string The date to be parsed.
@return Dictionary with values in keys, or null on bad data. */
function parse_date (string) {
var pattern = /(\d\d\d\d-\d\d-\d\d)T(\d\d):(\d\d):(\d\d)-(\d\d\d\d)/;
var matches = pattern.exec (string);
if (matches == null) return null;
var hr24 = parseInt (matches [2]);
return {
'date': matches [1],
'hour': hr24 == 0 ? 12 : hr24 > 12 ? hr24 - 12 : hr24,
'ampm': hr24 < 12 ? "am" : "pm",
'minute': parseInt (matches [3])
}
}
console.log (parse_date ("2018-12-31T09:27:00-0600"))
console.log (parse_date ("2018-12-31T14:29:00-0500"))
console.log (parse_date ("2018-12-31T00:29:00-0500"))
console.log (parse_date ("2018-12-31T12:29:00-0500"))
console.log (parse_date ("2018-12-31T13:29:00-0500"))
console.log (parse_date ("2018-12-31Tbjdfjdkfj0600"))
下面我创建了一个非常简单的时间工具对象。这很简单,你应该达到你所需要的。要在代码中使用它,您需要将
Date.now()
参数替换为TimeUtil
构造函数中的response.data.start
函数TimeUtil(毫秒){
this.src=新日期(毫秒);
this.day=this.src.getDate();
this.month=this.src.getMonth()+1;
this.year=this.src.getFullYear();
this.hour=this.src.getUTCHours()-(this.src.getTimezoneOffset()/60);
this.minute=this.src.getUTCMinutes();
this.getYear=函数(位数){
var s=this.year.toString();
返回s.子字符串(s.长度-数字,s.长度);
};
this.getHour=函数(){
var s=this.hour.toString();
如果(s.长度<2){
s=`0${s}`;
}
返回s;
};
this.getMinute=函数(){
var s=this.minute.toString();
如果(s.长度<2){
s=`0${s}`;
}
返回s;
};
this.getSuffix=函数(){
返回this.hour>=12?'PM':'AM';
}
}
var util=new TimeUtil(Date.now());
var TK_send_date=`${util.getYear(2)}-${util.month}-${util.day}`;
var TK_send_hour=util.getHour();
var TK_send_minute=util.getMinute();
var TK_ampm=util.getSuffix();
控制台日志(发送日期);
控制台日志(TK_发送时间);
控制台日志(TK_发送_分钟);
控制台日志(TK_ampm)
我对你问的问题很困惑。datestring是什么样子的?因为那是ISO日期,你可以将它粘贴在new date(variable)
中以获得日期对象,然后你可以使用各种过期方法来获得你想要的。
{ date: '2018-12-31', hour: 9, ampm: 'am', minute: 27 }
{ date: '2018-12-31', hour: 2, ampm: 'pm', minute: 29 }
{ date: '2018-12-31', hour: 12, ampm: 'am', minute: 29 }
{ date: '2018-12-31', hour: 12, ampm: 'pm', minute: 29 }
{ date: '2018-12-31', hour: 1, ampm: 'pm', minute: 29 }
null