在Javascript中管理多种日期格式

时间:2017-03-21 19:36:39

标签: javascript angularjs date

已多次提出类似问题,但我找不到更具体的解决方案。我正在做的事情是:

  1. 我的HTML中有一个<input type="date">,点击后会打开一个日期为dd / mm / yyyy格式的日历。
  2. 我将html5日期更改为时间戳,以便Date.parse(html5Date)发送到我的数据库,并在服务器中修改日期并将其发送回我的A​​ngular应用程序。
  3. 我现在通过new Date(timestamp)将时间戳转换回Date对象。要在表格中以人性化格式打印日期,我会[date.getDate(), date.getMonth() + 1, date.getFullYear()].join('/')
  4. 在编辑(PUT请求)时,我再次从HTML捕获日期,将其转换为时间戳,将其发送到服务器并将返回日期处理回html日期。
  5. 除了这些,我还做了很多功能,如日期比较,在日期中添加小时,在一天中显示当天等等:
  6. 这些简单的操作就是超过120行代码,我认为这些代码很荒谬且容易出错。我看过Angular Datepicker,但有点令人困惑。有时HTML日期的类型为Object,有时它是String,因此Date.parse()会出错。
  7. 是否有任何开发人员友好的方法:复制HTML5日期(来自datepicker) - &gt;更改为时间戳(对于角度和服务器) - &gt;格式化时间戳回字符串/对象(对于html)?谢谢:)
  8. 注意:Angular在控制台中引发了很多恼人的错误,说dateformat是错误的(是html日期类型)但不会阻止代码运行

2 个答案:

答案 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

的词

moment.js太棒了。它也是巨大的,它是一个厨房水槽API,有一个匹配的重量。你已经加载了角度,所以在用另一个巨大的库扩大你的有效载荷大小之前要仔细考虑。

答案 1 :(得分:0)

Moment.js是一个功能强大的日期格式和操作库。你可以在Moment.js中做很多事情就是一行代码,这会让生活变得更轻松。我同意,不使用像这样的日期格式和处理可能是一种痛苦。

http://momentjs.com/

编辑:fyi,我在我的Angular应用程序中使用它,发现它非常有用!