我正在尝试检查当前时间是否低于API响应的时间。问题是它们都是字符串。API的响应包含诸如:和-这样的字符,所以parseInt没有工作(至少这就是我的理论为什么它不工作)
var d = new Date();
var hour = d.getHours();
var minutes = d.getMinutes();
var year = d.getFullYear();
var month = d.getMonth() +1;
var day = d.getDate();
var seconds = d.getSeconds();
var time = year+'-'+month+'-'+day+' '+hour+':'+minutes+':'+seconds; time返回
"2016-11-7 15:48:2"接口响应为
"2016-11-07 20:06:00"我已经确认他们都是strings
time < APIresponse 总是返回false是否有已知的解决方案?提前谢谢。
发布于 2016-12-06 16:43:59
前言:时区
您当前的代码假设您从API获取的日期/时间是“本地时间”,因为您正在将它与浏览器本地时区中的当前日期/时间进行比较。API通常以UTC而不是“本地”时间提供日期/时间,因此要注意这种假设并仔细检查它。
如果您想在字符串级执行此操作
...you需要确保在构建time时将数字填零,例如,不只是7表示月份的日期,而是07。然后,您将得到具有有效可比较顺序的字段的字符串(因为最重要的字段年份是第一个,最不重要的字段秒是最后的),所以字符串的字典顺序比较是有效的。
例如,您可以像这样创建time:
var time = pad(year, 4) + '-' + pad(month, 2) + '-' + pad(day, 2) + ' ' + pad(hour, 2) + ':' + pad(minutes, 2) + ':' + pad(seconds, 2); ...where pad是您定义的函数,它可以根据需要添加任意多的0,以确保字符串的长度与第二个参数定义的长度相同。
然后您可以执行以下操作:
if (time < timeStringFromAPI)注意:如果API的响应是以UTC而不是本地时间为单位提供日期/时间,则需要使用UTC版本的访问器函数(例如,getUTCHours、getUTCFullYear等)。而不是你正在使用的,它是为当地时间。
如果您想在日期级别执行此操作
你需要将你从...then得到的日期转换成一个Date。它的形式几乎可以在现代浏览器上可靠地解析,但并不完全如此;一些浏览器会将该字符串解析为本地时间,而另一些浏览器则会将其解析为UTC时间。
如果您确定它是在本地时间,那么最好的做法是将它拆分为几个部分,并使用 Date构造函数:
var parts = timeStringFromAPI.split(/[-:]/);
var apiDate = new Date(
+parts[0], // Year
+parts[1] - 1, // Month
+parts[2], // Day
+parts[3], // Hours
+parts[4], // Minutes
+parts[5] // Seconds
);如果您确定它是UTC格式的,那么您可以使用new Date(Date.UTC(...))而不仅仅是new Date(...)来执行上述操作,或者您可以将字符串放入JavaScript date/time format中并进行解析:
var apiDate = new Date(timeStringFromAPI.replace(" ", "T") + "Z");这将获取"2016-11-07 20:06:00"并将其更改为"2016-11-07T20:06:00Z",它可以在所有未过时的浏览器上可靠地进行解析。
然后你可以这样做
if (new Date() < apiDate) {发布于 2016-11-07 13:56:03
试试这个:
var curDate = new Date();然后用这种方式比较
if (new Date(yourdate) <= curDate)
{
something...
}发布于 2016-11-07 14:10:40
var d1 = "2016-11-7 15:48:2";
var d2 = "2016-11-07 20:06:00";
if (new Date(d1) < new Date(d2)) {
alert('true')
}https://stackoverflow.com/questions/40458065
复制相似问题