【问题标题】:new Date('dd/mm/yyyy') instead of newDate('mm/dd/yyyy') [duplicate]new Date('dd/mm/yyyy') 而不是 newDate('mm/dd/yyyy') [重复]
【发布时间】:2018-06-28 14:16:06
【问题描述】:

是否可以将dd/mm/yyyy 格式的日期输入newDate(例如03/01/2018),以便返回对象Wed Jan 03 2018 00:00:00 GMT+0000 (Greenwich Mean Time) {}

如果我有一个日期03/01/2018,它会返回Thu Mar 01 2018 00:00:00 GMT+0000 (Greenwich Mean Time) {}...我不想通过mm/dd/yyyy 格式..

我查看了很多关于此的帖子,但找不到我的问题的答案。

【问题讨论】:

  • stackoverflow.com/a/7151607,只是将-替换为/
  • 为什么不能使用 mm/dd/yy 模式?
  • @חיים פרידמן 因为我正在使用一个充满这些日期的数据库
  • @LazioTibijczyk 它们是存储为字符串还是日期?因为你最好使用 ISO 8601。

标签: javascript date


【解决方案1】:

您无法控制 Date 构造函数,因此您需要为其提供所需格式的日期。由于您要自己格式化日期,因此最好使用另一个 Date 构造函数,它将年、月索引和日作为参数,因为它在不同的浏览器和运行时更安全:

  function my_date(date_string) {
      var date_components = date_string.split("/");
      var day = date_components[0];
      var month = date_components[1];
      var year = date_components[2];
      return new Date(year, month - 1, day);
    }
    
    console.log(my_date("03/01/2018"));

日期的例子,我在我创建的几乎每个 JavaScript 项目中都安装了moment 库。

注意:片段显示的结果可能不同;检查你的控制台。

【讨论】:

  • 这不是关于日期构造函数本身,而是关于解析器。
  • 好吧,RobG 这肯定比你的回答要好
【解决方案2】:

你可以像这样使用正则表达式:

var date = new Date("03-01-2018".replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"))

【讨论】:

  • 解析一个字符串来生成另一个必须再次解析的字符串不是一个好主意。在第一次解析之后,您可以将这些部分直接传递给 Date 构造函数。
【解决方案3】:

我建议你使用来自 http://momentjs.com/ 的 momentjs。它很容易输出任何你想要的格式。

moment().format('MMMM Do YYYY, h:mm:ss a'); // June 28th 2018, 10:30:09 pm
moment().format('dddd');                    // Thursday
moment().format("MMM Do YY");               // Jun 28th 18
moment().format('YYYY [escaped] YYYY');     // 2018 escaped 2018
moment().format();                         

【讨论】:

  • 这应该是评论,不是答案。
猜你喜欢
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 2020-02-24
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
相关资源
最近更新 更多