【问题标题】:Convert MM/DD/YYYY date to Month Day Year将 MM/DD/YYYY 日期转换为月日年
【发布时间】:2016-09-14 16:03:42
【问题描述】:

我正在尝试将 MM/DD/YYYY 日期转换为长日期。例如,02/12/2013 将转换为类似Tuesday February 12 2013 的内容。

我查看了 MomentJS 和其他 JS 方法,但没有真正达到我想要的效果。或者至少,我不这么认为。

有没有办法准确地进行这种日期转换?

【问题讨论】:

  • 你想使用moment.js还是只想要纯javascript?
  • something likeaccurately?

标签: javascript date momentjs date-manipulation


【解决方案1】:

如果您不想要任何其他脚本,您可以使用 Date 和一些数组

var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
var now = new Date('02/12/2013');
console.log(days[now.getDay()] + ' ' + months[now.getMonth()] + ' ' + now.getDate() + ' ' + now.getFullYear()); //Tuesday February 12 2013

【讨论】:

    【解决方案2】:

    使用 moment.js,

    你可以用 JavaScript Date 对象来做这件事

    var date = new Date(2013, 1, 12);
    console.log(moment(date).format('dddd MMMM D Y'));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.0/moment.min.js"></script>

    如果要将日期字符串转换为长日期格式字符串,可以这样做。

    var longDateStr = moment('02/12/2013', 'M/D/Y').format('dddd MMMM D Y');
    console.log(longDateStr);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.0/moment.min.js"></script>

    【讨论】:

    • 真的有帮助...谢谢
    【解决方案3】:

    我认为有一些简单的方法可以做到这一点。

    function getData() {
      var d = new Date("02/12/2013");
      var options = {
        weekday: 'long',
        year: 'numeric',
        month: 'long',
        day: 'numeric'
      };
      var n = d.toLocaleDateString('en-US', options);
      var t = d.toLocaleTimeString('en-GB')
      var replase = n.replace(new RegExp(',', 'g'), ' ')
      document.getElementById("demo").innerHTML = replase
    }
    getData()
    <span id="demo"></span>

    【讨论】:

      【解决方案4】:

      使用 moment.js 非常简单:

      console.log(moment('02/12/2013', 'MM/DD/YYYY').format('dddd MMMM D Y'))
      <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.0/moment.min.js"></script>

      【讨论】:

        【解决方案5】:

        在现代浏览器上,您可以使用Intl API

        Intl 对象是 ECMAScript 的命名空间 国际化 API,提供语言敏感字符串 比较、数字格式以及日期和时间格式。这 Collat​​or、NumberFormat 和 DateTimeFormat 对象的构造函数 是 Intl 对象的属性。

        手动解析,Date.parse

        不推荐使用 Date.parse 直到 ES5,解析 字符串完全依赖于实现。还有很多 不同主机解析日期字符串的方式不同,因此日期 应该手动解析字符串(如果有很多,库可以提供帮助 将适应不同的格式)。

        Date.UTC 用于为Intl.DateTimeFormat#format 提供来自parts 的日期。

        Date.UTC() 方法接受与最长形式相同的参数 构造函数,并返回 Date 中的毫秒数 对象自世界时间 1970 年 1 月 1 日 00:00:00 开始

        最后,'s 从en-US 格式化字符串中删除,以便它符合您的要求。

        const parts = '02/12/2013'.split('/');
        parts.unshift(parts.pop());
        parts[1] -= 1;
        const dateString = new Intl.DateTimeFormat('en-US', {
          weekday: 'long',
          year: 'numeric',
          month: 'long',
          day: 'numeric',
          timeZone: 'UTC'
        }).format(Date.UTC(...parts)).replace(/,/g, '');
        console.log(dateString);

        【讨论】:

        • 不是所有当前的浏览器support the Intl object(移动端支持特别差),也不是当前使用的许多浏览器。
        • 除 Safari 之外的所有主流浏览器都支持它的基本实现,我不知道的手机,但就像 ES5、ES6 和 ES7 一样,它有一个 shim/polyfill,但我从未测试过它。 github.com/andyearnshaw/Intl.js 就像一切一样,支持会变得更好。我不知道编译器是否支持它。
        【解决方案6】:

        你可以使用普通的 Javascript Date 方法来做类似的事情:

        var date  = new Date("01/01/2000")
        date.toDateString()   //"Sat Jan 01 2000"
        

        【讨论】:

        • OP 没有要求“类似的东西”。
        • "...例如,2013 年 2 月 12 日将转换为 2013 年 2 月 12 日星期二。"另外一个快速的 String.replace() 可以在不需要外部库的情况下修复格式
        • 不推荐使用 Date 构造函数(或 Date.parse)解析字符串,因为它很大程度上依赖于实现且不可靠。
        【解决方案7】:

        FullJS:

        function mydate(date)
        {
          var
            month = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
            days  = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
          ;
          return days[date.getDay()]+' '+month[date.getMonth()]+' '+date.getDate()+' '+date.getFullYear()
        }
        
        console.log(mydate(new Date()));
        

        参考https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

        【讨论】:

          【解决方案8】:

          使用时刻,

          moment().format('dddd MMMM Do YYYY');
          

          在momentJS的主页上,你可以看到所有可能的日期格式列表(http://momentjs.com/)。

          Do在日期后面加上“nth”,将D设为只显示一个数字,但既然你都是用文字写的,最好用“nth”

          【讨论】:

            猜你喜欢
            • 2011-05-16
            • 1970-01-01
            • 2023-04-03
            • 1970-01-01
            • 1970-01-01
            • 2023-03-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多