已多次提出类似问题,但我找不到更具体的解决方案。我正在做的事情是:
<input type="date">
,点击后会打开一个日期为dd / mm / yyyy格式的日历。Date.parse(html5Date)
发送到我的数据库,并在服务器中修改日期并将其发送回我的Angular应用程序。new Date(timestamp)
将时间戳转换回Date对象。要在表格中以人性化格式打印日期,我会[date.getDate(), date.getMonth() + 1, date.getFullYear()].join('/')
。注意:Angular在控制台中引发了很多恼人的错误,说dateformat是错误的(是html日期类型)但不会阻止代码运行
答案 0 :(得分:1)
听起来你正在做许多转换。我认为应该只有一种方式表示日期:作为编程语言中的Date
对象。只需要进行少量转换:
Date <=> Integer milliseconds since the epoch to pass to server
Date <=> String human-readable format to display to user
除此之外的任何事情都是在寻找麻烦。可以通过转换为int date.getTime()
进行比较,比较并转换回Date
。同上添加。请注意Date.parse
依赖于实现它将接受的内容,尽管所有这些都接受ISO 8601格式的日期字符串,其他任何东西都是猜测。这意味着您必须手动处理字符串转换,如下所示:
var toDate = str => {
var splitter = str.indexOf("/") === -1 ? "-" : "/";
var [mon, day, year] = str.split(splitter);
return new Date(year, mon - 1, day);
};
var toDateString = date => {
return "" + date.getFullYear() + (date.getMonth() + 1) +...
};
请注意,没有验证,这是作为读者留下的练习。
moment.js太棒了。它也是巨大的,它是一个厨房水槽API,有一个匹配的重量。你已经加载了角度,所以在用另一个巨大的库扩大你的有效载荷大小之前要仔细考虑。
答案 1 :(得分:0)
Moment.js是一个功能强大的日期格式和操作库。你可以在Moment.js中做很多事情就是一行代码,这会让生活变得更轻松。我同意,不使用像这样的日期格式和处理可能是一种痛苦。
编辑:fyi,我在我的Angular应用程序中使用它,发现它非常有用!