【问题标题】:Get current date in DD-Mon-YYY format in JavaScript/Jquery在 JavaScript/Jquery 中以 DD-Mon-YYYY 格式获取当前日期
【发布时间】:2015-02-13 07:49:04
【问题描述】:

我需要在 javascript 中将日期格式设置为“DD-Mon-YYYY”。 我问过question,它被标记为与jQuery date formatting 重复

但是,问题中提供的答案是以“DD-MM-YYYY”格式而不是“DD-MON-YYYY”格式获取当前日期。 其次,我没有使用 datepicker 插件。

你能帮我看看如何以“DD-Mon-YYYY”格式获取当前日期。

【问题讨论】:

  • 目前接受的答案过于复杂。我编辑了another answer,我认为它更好地回答了你的问题。你能看一下吗?

标签: javascript jquery date datetime


【解决方案1】:

DD-Mon-YYYY 在 JavaScript 中没有原生格式。

您必须手动将它们放在一起。

答案的灵感来自: How to format a JavaScript date

// Attaching a new function  toShortFormat()  to any instance of Date() class

Date.prototype.toShortFormat = function() {

    let monthNames =["Jan","Feb","Mar","Apr",
                      "May","Jun","Jul","Aug",
                      "Sep", "Oct","Nov","Dec"];
    
    let day = this.getDate();
    
    let monthIndex = this.getMonth();
    let monthName = monthNames[monthIndex];
    
    let year = this.getFullYear();
    
    return `${day}-${monthName}-${year}`;  
}

// Now any Date object can be declared 
let anyDate = new Date(1528578000000);

// and it can represent itself in the custom format defined above.
console.log(anyDate.toShortFormat());    // 10-Jun-2018

let today = new Date();
console.log(today.toShortFormat());     // today's date

【讨论】:

    【解决方案2】:

    您可以使用 toLocaleDateString 并寻找接近 DD-mmm-YYYY 的格式(提示:“en-GB”;您只需将空格替换为“-”)。

    const date = new Date();
    const formattedDate = date.toLocaleDateString('en-GB', {
      day: 'numeric', month: 'short', year: 'numeric'
    }).replace(/ /g, '-');
    console.log(formattedDate);

    【讨论】:

    • 我的输出格式是 2019 年 12 月 11 日,这不是预期的。请帮帮我
    • @SujathaGirijala 你找到解决方案了吗?
    • @SujathaGirijala 这可能是因为您使用的语言环境。此示例中使用了“en-GB”,这应该为您提供 DD Mon YYYY。如果您使用区域设置“en-US”,则会得到 Mon DD, YYYY。
    【解决方案3】:

    使用 Moment.js 库 http://momentjs.com/ 它会为您省去很多麻烦。

    moment().format('DD-MMM-YYYY');
    

    【讨论】:

    【解决方案4】:

    可以用toLocaleDateString完成

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

    <script>
    const date = new Date();
    const formattedDate = date.toLocaleDateString('en-GB', {
      day: '2-digit', month: 'short', year: 'numeric'
    }).replace(/ /g, '-');
    document.write(formattedDate);
    </script>

    【讨论】:

      【解决方案5】:

      我做了一个自定义日期字符串格式函数,你可以使用。

      var  getDateString = function(date, format) {
              var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
              getPaddedComp = function(comp) {
                  return ((parseInt(comp) < 10) ? ('0' + comp) : comp)
              },
              formattedDate = format,
              o = {
                  "y+": date.getFullYear(), // year
                  "M+": months[date.getMonth()], //month
                  "d+": getPaddedComp(date.getDate()), //day
                  "h+": getPaddedComp((date.getHours() > 12) ? date.getHours() % 12 : date.getHours()), //hour
                   "H+": getPaddedComp(date.getHours()), //hour
                  "m+": getPaddedComp(date.getMinutes()), //minute
                  "s+": getPaddedComp(date.getSeconds()), //second
                  "S+": getPaddedComp(date.getMilliseconds()), //millisecond,
                  "b+": (date.getHours() >= 12) ? 'PM' : 'AM'
              };
      
              for (var k in o) {
                  if (new RegExp("(" + k + ")").test(format)) {
                      formattedDate = formattedDate.replace(RegExp.$1, o[k]);
                  }
              }
              return formattedDate;
          };
      

      现在假设你已经:-

          var date = "2014-07-12 10:54:11";
      

      所以要格式化你写的这个日期:-

      var formattedDate = getDateString(new Date(date), "d-M-y")
      

      【讨论】:

      • 您不需要滚动自己的日期函数。 Date 对象已经有一个method that does what the OP asked
      • 谢谢,上面的答案在我的地区不起作用,但你的工作正常!
      【解决方案6】:
      const date = new Date();
      
      date.toLocaleDateString('en-GB', { day: 'numeric', month: 'short', year: 'numeric' }))
      

      【讨论】:

      【解决方案7】:

      使用 Intl 对象(或通过 toLocaleString)有些问题,但可以使用 formatToParts method 并手动将部件按顺序排列,例如

      function formatDate(date = new Date()) {
        let {day, month, year} = new Intl.DateTimeFormat('en', {
          day:'2-digit',
          month: 'short',
          year: 'numeric'
        }).formatToParts(date).reduce((acc, part) => {
          if (part.type != 'literal') {
            acc[part.type] = part.value;
          }
          return acc;
        }, Object.create(null));
        return `${day}-${month}-${year}`;
      }
      
      console.log(formatDate());

      formatToParts 返回的数组上使用 reduce 会删除文字并创建一个具有命名属性的对象,然后将其分配给变量并最终格式化。

      此功能并不总是适用于英语以外的语言,因为短月份名称可能包含标点符号。

      【讨论】:

      • 完美答案!其余所有答案将以不同的顺序产生结果
      【解决方案8】:
      /*
        #No parameters
        returns a date with this format DD-MM-YYYY
      */
      function now()
      {
        var d = new Date();
        var month = d.getMonth()+1;
        var day = d.getDate();
      
        var output = (day<10 ? '0' : '') + day + "-" 
                    + (month<10 ? '0' : '') + month + '-'
                    + d.getFullYear();
      
        return output;
      }
      

      【讨论】:

      • 这是一个非常低质量的答案:请解释您的代码的作用。此外,此代码不带参数,但确实需要一个全局变量d。最后,它没有回答 OP 的问题:YYYY/MM/DD 与所要求的 DD-Mon-YYY 不同。
      【解决方案9】:

      传递数据changeFormate(15/07/2020)

        changeFormate(date) {
      let month_names = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
      let incomingDateChnge: any = new Date(date);
      let incomingDay = incomingDateChnge.getDate();
      let incomingMonth = incomingDateChnge.getMonth();
      
      let incomingYear = incomingDateChnge.getFullYear();
      if (incomingDay < 10) {
        incomingDay = '0' + incomingDay;
      }
      
      incomingDateChnge = incomingDay + ' ' + month_names[incomingMonth] + ' ' + incomingYear;
      return incomingDateChnge;
       }
      

      【讨论】:

        【解决方案10】:

        这是一个简单的解决方案,使用 TypeScript:

          convertDateStringToDate(dateStr) {
            //  Convert a string like '2020-10-04T00:00:00' into '4/Oct/2020'
            let months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
            let date = new Date(dateStr);
            let str = date.getDate()
                        + '/' + months[date.getMonth()]
                        + '/' + date.getFullYear()
            return str;
          }
        

        (是的,我知道问题是关于 JavaScript 的,但我确信我不会是唯一看到这篇文章的 Angular 开发人员!)

        【讨论】:

          【解决方案11】:

          默认情况下,new Date().toString() 将始终返回'Sun Dec 12 2021...',所以:

          d=new Date();
          s=d.getDate()+'-'+d.toString().substr(4,3)+'-'+d.getFullYear();
          
          console.log(s);

          不需要 JQuery。

          【讨论】:

            【解决方案12】:

            DD-MM-YYYY 只是其中一种格式。 jquery 插件的格式,基于此列表:http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

            在 chrome 控制台中测试了以下代码:

            test = new Date()
            test.format('d-M-Y')
            "15-Dec-2014"
            

            【讨论】:

            • 是的,我了解日期格式,但是如何将当前日期转换为 dd-mon-yyyy,例如,我想获取 15-Dec-2014 格式的当前日期。
            • 通常这应该可以工作(在控制台中测试): test = new Date(); test.format('d-M-Y')
            • 同意。这会很棒,但格式不是函数
            • 在控制台执行时TypeError: test.format is not a function test = new Date() test.format('d-M-Y');
            • 这是 JS 不是 Java
            【解决方案13】:

            const monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
            var currDate= new Date();
            var newDate=currDate.toLocaleDateString();
            var splitNewDate= newDate.split('/');
            var formatDate= splitNewDate[1] + '-'+ monthNames[splitNewDate[0]] +'-'+ splitNewDate[2];
            
            console.log(formatDate);
            //convert DateTime result in jquery mvc 5 using entity fremwork 
            
            const monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
                
            
            function DateAndTime(date) {
             
                var value = new Date
                    (
                    parseInt(date.replace(/(^.*\()|([+-].*$)/g, ''))
                ); 
                var dat = value.getDate() +
                    "-" +
                    monthNames[value.getMonth()] +
                    "-" +
                    value.getFullYear();
            
                var hours = value.getHours();
                var minutes = value.getMinutes();
                var ampm = hours >= 12 ? 'PM' : 'AM';
                hours = hours % 12;
                hours = hours ? hours : 12; // the hour '0' should be '12'
                minutes = minutes < 10 ? '0' + minutes : minutes;
                var strTime = hours + ':' + minutes + ' ' + ampm;
                return { Date: dat, Time: strTime };
            }
            // var getdate = DateAndTime(StartDate);
            //var Date = getdate.Date;//here get date
            //var time = getdate.Time;//here get Time
            //alert(Date)
            

            【讨论】:

              【解决方案14】:

              const date = new Date();
              const formattedDate = date.toLocaleDateString('en-GB', {
                day: 'numeric', month: 'short', year: 'numeric'
              });
              console.log(formattedDate);

              【讨论】:

              • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
              • OP 想要DD-Mon-YYYY,你的答案是DD/MM/YYYY
              【解决方案15】:
              var date = new Date();
              
              console.log(date.toJSON().slice(0,10).replace(new RegExp("-", 'g'),"/" ).split("/").reverse().join("/")+" "+date.toJSON().slice(11,19));
              

              // 输出:01/09/2016 18:30:00

              【讨论】:

                【解决方案16】:

                            var today = new Date();           
                
                            var formattedtoday = today.getDate() + '-' + (today.getMonth() + 1) + '-' + today.getFullYear();
                            
                            alert(formattedtoday);

                【讨论】:

                • 这个答案不符合OP的要求。所需的格式是 dd-Mon-yyyy 而不是 dd-MM-yyyy
                【解决方案17】:

                使用日期格式 dd-MM-yy 。它将输出如下:2014 年 12 月 16 日。

                【讨论】:

                • 这不是答案。请发布有效的适用答案
                猜你喜欢
                • 2011-12-06
                • 1970-01-01
                • 1970-01-01
                • 2013-10-04
                • 1970-01-01
                • 2011-06-29
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多