在Firebase上存储日期输入值

时间:2016-11-27 13:11:12

标签: angularjs firebase firebase-realtime-database angular-filters

所以这就是我的代码的样子

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

mycrop.harvestdatemycrop.plantdate都是来自我的html

的日期输入
<input type="date" ng-model='mycrop.harvestdate'>

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

为了能够将数据放在我的Firebase数据库上,我需要先将其转换为字符串

cropplantdate:mycrop.plantdate.toString(),      

但我的Firebase数据库中的数据包含时间和时区

示例数据

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

所以一旦我从我的数据库中调用数据,我就无法过滤它,因为它不再是一个日期而是一个字符串。 如何解决此问题,以便我可以过滤存储在我的数据库中的日期(转换为字符串)

2 个答案:

答案 0 :(得分:3)

两个选项

1)以更通用但人类可读的格式存储日期,所以现在是11月27日星期日09:13:38

20161127091338

2)使用

将日期存储为unix时间戳(以毫秒为单位)
(new Date).getTime() / 1000

#2有很多变种,所以做一些研究,看看哪种最适合你的用例。

您可以将答案保存为字符串,但#1更容易搜索,因为查询不需要任何类型的转换 - 查看今天的事件

queryStartingAt("20161127") and queryEndingAt("20161127")

答案 1 :(得分:0)

您需要先在格式中转换日期。你可以使用SimpleDateFormatFormat。

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

现在您可以轻松地将日期格式化为此格式

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

今天的输出将是:

2016-11-27

当然,您可以将其反转回日历。我是这样做的:

 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;
}