首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将2个字符串与数值JS进行比较

将2个字符串与数值JS进行比较
EN

Stack Overflow用户
提问于 2016-11-07 12:53:18
回答 3查看 58关注 0票数 0

我正在尝试检查当前时间是否低于API响应的时间。问题是它们都是字符串。API的响应包含诸如:和-这样的字符,所以parseInt没有工作(至少这就是我的理论为什么它不工作)

代码语言:javascript
复制
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返回

代码语言:javascript
复制
"2016-11-7 15:48:2"

接口响应为

代码语言:javascript
复制
"2016-11-07 20:06:00"

我已经确认他们都是strings

代码语言:javascript
复制
time < APIresponse 

总是返回false是否有已知的解决方案?提前谢谢。

EN

回答 3

Stack Overflow用户

发布于 2016-12-06 16:43:59

前言:时区

您当前的代码假设您从API获取的日期/时间是“本地时间”,因为您正在将它与浏览器本地时区中的当前日期/时间进行比较。API通常以UTC而不是“本地”时间提供日期/时间,因此要注意这种假设并仔细检查它。

如果您想在字符串级执行此操作

...you需要确保在构建time时将数字填零,例如,不只是7表示月份的日期,而是07。然后,您将得到具有有效可比较顺序的字段的字符串(因为最重要的字段年份是第一个,最不重要的字段秒是最后的),所以字符串的字典顺序比较是有效的。

例如,您可以像这样创建time

代码语言:javascript
复制
var time = pad(year, 4) + '-' + pad(month, 2) + '-' + pad(day, 2) + ' ' + pad(hour, 2) + ':' + pad(minutes, 2) + ':' + pad(seconds, 2); 

...where pad是您定义的函数,它可以根据需要添加任意多的0,以确保字符串的长度与第二个参数定义的长度相同。

然后您可以执行以下操作:

代码语言:javascript
复制
if (time < timeStringFromAPI)

注意:如果API的响应是以UTC而不是本地时间为单位提供日期/时间,则需要使用UTC版本的访问器函数(例如,getUTCHoursgetUTCFullYear等)。而不是你正在使用的,它是为当地时间。

如果您想在日期级别执行此操作

你需要将你从...then得到的日期转换成一个Date。它的形式几乎可以在现代浏览器上可靠地解析,但并不完全如此;一些浏览器会将该字符串解析为本地时间,而另一些浏览器则会将其解析为UTC时间。

如果您确定它是在本地时间,那么最好的做法是将它拆分为几个部分,并使用 Date构造函数:

代码语言:javascript
复制
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中并进行解析:

代码语言:javascript
复制
var apiDate = new Date(timeStringFromAPI.replace(" ", "T") + "Z");

这将获取"2016-11-07 20:06:00"并将其更改为"2016-11-07T20:06:00Z",它可以在所有未过时的浏览器上可靠地进行解析。

然后你可以这样做

代码语言:javascript
复制
if (new Date() < apiDate) {
票数 0
EN

Stack Overflow用户

发布于 2016-11-07 13:56:03

试试这个:

代码语言:javascript
复制
   var curDate = new Date();

然后用这种方式比较

代码语言:javascript
复制
  if (new Date(yourdate) <= curDate)
   {
  something...
 }
票数 -2
EN

Stack Overflow用户

发布于 2016-11-07 14:10:40

代码语言:javascript
复制
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')
}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40458065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档