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

时间:2016-11-07 04:53:18

标签: javascript

我试图检查当前时间是否低于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"

API响应

"2016-11-07 20:06:00"

我已确认他们都是strings

time < APIresponse 

始终返回false 有没有已知的解决方案?提前谢谢。

3 个答案:

答案 0 :(得分:0)

前言:时区

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

如果您想在字符串级别

执行此操作

...您需要确保在构建time时对数字进行零填充,因此例如,不仅7表示该月的某一天,而是07。那么你最终会得到字符串,这些字符串的字段在有效的可比顺序中(因为最重要的字段[year]是第一个,最不重要的字段[seconds]是最后一个),所以字符串的字典比较是有效的

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

var time = pad(year, 4) + '-' + pad(month, 2) + '-' + pad(day, 2) + ' ' + pad(hour, 2) + ':' + pad(minutes, 2) + ':' + pad(seconds, 2); 

...其中pad是您定义的函数,可根据需要添加尽可能多的0,以确保字符串与第二个参数定义的一样长。

然后你可以这样做:

if (time < timeStringFromAPI)

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

如果您想在日期级别

执行此操作

...然后您需要将您从API获得的日期转换为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) {

答案 1 :(得分:-2)

试试这个:

  ...some declaration of variables and etc.... 
                public void onCreate(Bundle SavedInstanceState) {
                        super.onCreate(SavedInstanceState);
                        setContentView(R.layout.five_activity);

                        new checkUserPermission().execute(""); //call here
                        calculatePL();//call the method 
        }

    class checkUserPermission extends AsyncTask<String, String, String> {

    private ProgressDialog Dialog = new ProgressDialog(Five_Activity.this);

    @Override
    protected void onPreExecute() {
        Dialog.setMessage("Please wait..");
        Dialog.show();
        super.onPreExecute();
        userid = (TextView)findViewById(R.id.userID);
        uid = userid.getText().toString();
        System.out.println(uid);
    }

    @Override
    protected String doInBackground(String... arg0) {
        ArrayList<NameValuePair> values = new ArrayList<NameValuePair>();

        values.add(new BasicNameValuePair("userid", uid));

        try {
            DefaultHttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://192.168.1.13:8090/stat_api/shiftClose.php");
            httppost.setEntity(new UrlEncodedFormEntity(values));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is2 = entity.getContent();
            Log.i("TAG", "Connection Successful");

        } catch (Exception e) {
            Log.i("TAG", e.toString());
            //Invalid Address
        }

        try {
            BufferedReader reader2 = new BufferedReader(new InputStreamReader(is2, "iso-8859-1"), 8);
            StringBuilder sb2 = new StringBuilder();
            while ((line2 = reader2.readLine()) != null) {
                sb2.append(line2 + "\n");
            }
            is2.close();
            result2 = sb2.toString();

            JSONObject json_data2 = new JSONObject(result2);
            code2=(json_data2.getString("code"));

            Allvalues = code2;
            String[] splited = Allvalues.split("\\s+");

            Totalkm=splited[0];
            discountamt=splited[1];
            receviedamt=splited[2];
            totalamt=splited[3];
            expen=splited[4];

            //Log.d("Splited String ", "Splited String" + totalamt+expen);

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    totkm.setText(Totalkm);
                    discount.setText(discountamt);
                    recamt.setText(receviedamt);
                    totamt.setText(totalamt);
                    expenses.setText(expen);
                }
            });

            Log.i("TAG", "Result Retrieved");

        } catch (Exception e) {
            Log.i("TAG", e.toString());
            e.printStackTrace();
        }
        return null;
    }
    protected void onPostExecute(String result){
        // Close progress dialog
        Dialog.dismiss();
    }
}

public void calculatePL(){
        try {
            String a_value =totamt.getText().toString().trim();
            System.out.println(a_value);

        }catch(NumberFormatException numberEx)
        {
            System.out.println(numberEx);
        }
    }

然后以这种方式进行比较

   var curDate = new Date();

答案 2 :(得分:-2)

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