【问题标题】:date formatting with/without Moment.js带/不带 Moment.js 的日期格式
【发布时间】:2013-06-13 17:52:08
【问题描述】:

我正在尝试重新格式化从 API 获取的日期。在我拥有的对象中:

created_at: "2013-06-13T16:29:55.245Z"

我想将日期显示为 2013 年 6 月 13 日。有人建议我使用 moment.js。它有大量的文档,但我对如何使用它有点困惑。有人可以帮忙或建议一种更简单的方法吗?

【问题讨论】:

  • 你只想格式化'T'之前的字符串?

标签: javascript date momentjs


【解决方案1】:

不需要修改原来的字符串,可以这样使用:

alert(moment("2013-06-13T16:29:55.245Z").format("M/DD/YYYY"));

效果很好:http://jsfiddle.net/K5ub8/2/

【讨论】:

    【解决方案2】:

    瞬间你就可以做到这一点

    var timeStr = "2013-06-13T16:29:55.245Z",
        newFormat = moment(timeStr).format('M/DD/YYYY');
    
    document.body.textContent = newFormat;
    <script src="https://rawgithub.com/timrwood/moment/2.9.0/min/moment.min.js"></script>

    输出

    6/13/2013 
    

    没有时间和使用纯字符串操作而不是 new Date 对象,您可以这样做

    var timeStr = "2013-06-13T16:29:55.245Z",
        temp = timeStr.split("T")[0].split("-").reverse(),
        newFormat;
    
    temp[0] = temp.splice(1, 1, temp[0])[0];
    newFormat = temp.join("/");
    if (newFormat.charAt(0) === "0") {
      newFormat = newFormat.slice(1);
    }
    
    document.body.textContent = newFormat;

    输出

    6/13/2013 
    

    通过使用Date 对象查看@Antony answer答案已删除

    或者,如果您需要更多 cross-browser compatibleDate 对象,但仍然是字符串解析。

    var timeStr = "2013-06-13T16:29:55.245Z",
        intermediate = timeStr.split("T"),
        newStr = intermediate[0].split("-").join("/") + " " + intermediate[1].split(".")[0] + " GMT",
        newDate = new Date(newStr),
        newFormat = (1 + newDate.getUTCMonth()) + "/" + newDate.getUTCDate() + "/" + newDate.getFullYear();
    
    document.body.textContent = newFormat;

    输出

    6/13/2013 
    

    最后,您可以使用这些参数将字符串拆分为组件并将其输入Date.UTC,而不是让Date 进行字符串解析。

    Date.UTC(年,月,日[,时,分,秒,毫秒]);

    所以也许你现在可以明白为什么人们建议使用moments.js,但只要你有知识,那么在没有库的情况下自己做也不会太痛苦。

    【讨论】:

    • 我喜欢您的 moment(timeStr).format('M/DD/YYYY'); 方法,但请务必提及,例如,如果您使用 0000-01-01T00:00:00.0Z,并且不在 GMT 时区或其以东,直到国际日期变更线,它将翻译为 12 月 31 日,而不是 1 月 1 日。这适用于我们这些在美国的人,例如:对于 EST,我们需要输入 05:00:00.0Z
    • @vapcguy 现在应该修复,在解析时添加缺少的“GMT”,在使用部件时指向 Date.UTC。
    • 我更多地指的是除了 GMT 之外的每个人,在使用示例将时区转换为自己的当地时间时,他们需要确保他们考虑了时区。很容易让它进入 GMT/UTC,我更多地谈论如何摆脱它,而我的观点更多的是对日期进行硬编码。 Date.UTC() 将为您提供自 1970 年 1 月 1 日午夜以来的毫秒数,UTC 时间,但您仍需要使用 new Date(),如 new Date(Date.UTC(96, 11, 1, 0, 0, 0)); 来获取适合您所在地区的日期/时间。使用这些数字会得到 11 月 30 日晚上 7 点,而不是 12 月 1 日上午 12 点。
    • 是的,这就是为什么我提供了一个非常古老的表格dygraphs.com/date-formats.html 的链接,该表格显示了其中一些差异。众所周知,依赖Date.parse 是一个坏主意,最好自己执行解析(对于您正在使用的字符串),然后将部分输入DateDate.UTC,具体取决于你的要求。这就是为什么建议首先进行字符串操作。这是另一个例子stackoverflow.com/questions/27720916/…
    【解决方案3】:

    也许你可以使用拆分

    var tuple = createdAt.split("T");
    var date = tuple[0];
    var dateTuple = date.split("-");
    var day = parseInt(dateTuple[2]);
    var month = parseInt(dateTuple[1]);
    var year = parseInt(dateTuple[0]);
    var newFormatedDate = [ month , day,  year ].join("/");
    

    【讨论】:

    • 更好,它现在提供 06/13/2013 但 OP 想要 6/13/2013: jsfiddle.net/Xotic750/mRPcP
    • 大声笑。抱歉,我没有注意到月份的 0
    • 现在可以了,尽管 OP 没有指定他们是否在当天需要前导零,仅在月份和年份不应该有任何(最有可能),+1
    【解决方案4】:

    您可以查看此格式化时间 API - https://www.mashape.com/parsify/format#!endpoint-Time

    我输入了您的日期“2013-06-13T16:29:55.245Z”并得到以下回复 -

    {
      "given": "2013-06-13T16:29:55.245Z",
      "time": {
      "daysInMonth": 30,
      "millisecond": 245,
      "second": 55,
      "minute": 29,
      "hour": 16,
      "date": 13,
      "day": 4,
      "week": 24,
      "month": 5,
      "year": 2013,
      "zone": "+0000"
     },
      "formatted": {
      "weekday": "Thursday",
      "month": "June",
      "ago": "2 hours",
      "calendar": "Today at 4:29 PM",
      "generic": "2013-06-13T16:29:55+00:00",
      "time": "4:29 PM",
      "short": "06/13/2013",
      "slim": "6/13/2013",
      "hand": "Jun 13 2013",
      "handTime": "Jun 13 2013 4:29 PM",
      "longhand": "June 13 2013",
      "longhandTime": "June 13 2013 4:29 PM",
      "full": "Thursday, June 13 2013 4:29 PM",
      "fullSlim": "Thu, Jun 13 2013 4:29 PM"
     },
      "array": [
       2013,
       5,
       13,
       16,
       29,
       55,
       245
      ],
     "offset": 1371140995245,
     "unix": 1371140995,
     "utc": "2013-06-13T16:29:55.245Z",
     "valid": true,
     "integer": false,
     "zone": 0
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      相关资源
      最近更新 更多