0

So this is how my code looks like

cropref.child(mycrop.name).push({
                          cropname:mycrop.name,
                          croplocation:mycrop.location,
                          cropplantdate:mycrop.plantdate.toString(),
                          cropharvestdate:mycrop.harvestdate.toString(),         
                  })

mycrop.harvestdate and mycrop.plantdate are both date inputs from my html

<input type="date" ng-model='mycrop.harvestdate'>

<input type="date" ng-model='mycrop.harvestdate'>

to be able to put the data on my Firebase database , I need to convert it first into string

cropplantdate:mycrop.plantdate.toString(),      

but the data on my Firebase database includes time and timezone

sample data

Sat Dec 12 2020 00:00:00 GMT+0800 (Malay Peninsula Standard Time)

so once I call the data from my database, I can't filter it since it's not a date anymore but a string. How do I solve this problem so that I can filter date (which is converted to string) stored inside my database

1
  • If you insist on storing dates as strings, store them in a format that is chronological in lexicographical order. E.g. 2016-11-27T17:01:19. But better yet: simply store the timestamp as milliseconds since the epoch. See stackoverflow.com/questions/34957249/… Commented Nov 27, 2016 at 16:01

2 Answers 2

3

Two options

1) Store the date in a more generic, but human readable format, so right now would be Sunday November 27 at 09:13:38

20161127091338

2) Store the date as a unix timestamp (in milliseconds) using

(new Date).getTime() / 1000

There are a lot of variants to #2 so do some research to see which is best for your use case.

You can save either answer as a string but #1 would be more easily searchable since queries wouldn't require any kind of conversions - to see todays events

queryStartingAt("20161127") and queryEndingAt("20161127")
Sign up to request clarification or add additional context in comments.

2 Comments

i like the number one but how do i convert it back to date format sir ? like mm/dd/yyyy again
@Nevin There are a bunch of ways to convert dates but check this question and answer out Angular Date Converstion
0

You need to convert the date first in your Format. You can use SimpleDateFormatFormat for that.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

Now you can easily format your date to this format

String mynewdate = sdf.format(mycrop.plantdate.getTime());

The Output for today would be:

2016-11-27

Of course you can reverse that back to a Calendar. I do it this way:

 public static Calendar fromStringtoCalendar(String datestring){
    int year =  Integer.valueOf(datestring.substring(0, 4));
    int month =  Integer.valueOf(datestring.substring(5, 7)) -1;
    int day =  Integer.valueOf(datestring.substring(8, 10));
    Calendar calendar = Calendar.getInstance();
    calendar.set(year, month, day);
    return calendar;
}

2 Comments

i think the the code is used for android ? i'm using web btw
Oh, I'm sorry, I made a mistake there.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.