Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将日期字符串分解或解析为单独的yy-mm-dd、hh和mm-am或pm_Javascript - Fatal编程技术网

Javascript 如何将日期字符串分解或解析为单独的yy-mm-dd、hh和mm-am或pm

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

我试图从通过我们正在使用的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
  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