我试图检查当前时间是否低于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 有没有已知的解决方案?提前谢谢。
答案 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版本(例如getUTCHours
,getUTCFullYear
等等,而不是你当时正在使用的那些。
...然后您需要将您从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')
}