【问题标题】:How do I get a date in YYYY-MM-DD format?如何获取 YYYY-MM-DD 格式的日期?
【发布时间】:2015-11-18 12:05:10
【问题描述】:

通常,如果我想得到日期,我可以做类似的事情

var d = new Date(); console.log(d);

这样做的问题是,当我运行该代码时,它会返回:

2015 年 8 月 24 日星期一 4:20:00 GMT-0800(太平洋标准时间)

我怎样才能让 Date() 方法以“MM-DD-YYYY”格式返回一个值,以便它返回如下内容:

2015 年 8 月 24 日

或者,也许是 MM-DD-YYYY H:M

2016 年 8 月 24 日 4:20

【问题讨论】:

  • 我建议您使用momentjs.com 来满足您的所有 javascript 日期需求,它让一切变得更容易。
  • 在 UTC,d.toISOString().split('T')[0]
  • 我想你可以在这里找到答案:- [如何在 Javascript 中获取当前格式化日期 dd/mm/yyyy 并将其附加到输入。 ][1] [1]:stackoverflow.com/questions/12409299/…
  • 不敢相信这么简单的请求竟然不能被Javascript原生函数解决。

标签: javascript date


【解决方案1】:

下面的代码是一种实现方式。如果您有日期,请将其传递给 convertDate() 函数,它将返回 YYYY-MM-DD 格式的字符串:

var todaysDate = new Date();

function convertDate(date) {
  var yyyy = date.getFullYear().toString();
  var mm = (date.getMonth()+1).toString();
  var dd  = date.getDate().toString();

  var mmChars = mm.split('');
  var ddChars = dd.split('');

  return yyyy + '-' + (mmChars[1]?mm:"0"+mmChars[0]) + '-' + (ddChars[1]?dd:"0"+ddChars[0]);
}

console.log(convertDate(todaysDate)); // Returns: 2015-08-25

【讨论】:

  • x < 10 比.split 便宜很多,还省了.toStringing
  • 是的,因为月份从 0 开始。一月 = 0,二月是 1。您希望它像一月 = 1,二月 = 2,所以我们将值加 1。
【解决方案2】:

只需使用内置的.toISOString() 方法,如下所示:toISOString().split('T')[0]。简单、干净,所有内容都集中在一行中。

var date = (new Date()).toISOString().split('T')[0];
document.getElementById('date').innerHTML = date;
<div id="date"></div>

请注意,格式化字符串的时区是UTC,而不是本地时间。

【讨论】:

  • 这可能需要注意,结果将是 UTC (GMT+0000),而不是客户端的本地时区(例如 GMT-0700)
【解决方案3】:

如果您尝试获取“本地 ISO”日期字符串。试试下面的代码。

function (date) {
    return new Date(+date - date.getTimezoneOffset() * 60 * 1000).toISOString().split(/[TZ]/).slice(0, 2).join(' ');
}

+date 获取日期的毫秒数。

参考:Date.prototype.getTimezoneOffset 玩得开心:)

【讨论】:

  • 这只是在询问 DST 边界的问题(以及某些时区/语言环境的其他甚至更奇怪的怪癖)。
【解决方案4】:
function formatdate(userDate){
  var omar= new Date(userDate);
  y  = omar.getFullYear().toString();
  m = omar.getMonth().toString();
  d = omar.getDate().toString();
  omar=y+m+d;
  return omar;
}
console.log(formatDate("12/31/2014"));

【讨论】:

  • 请补充说明。仅代码答案并不是很有帮助。
  • 此代码不起作用,并且有两个问题:它不会生成 yyyy-mm-dd 格式,因为您没有在年份、月份或日期中添加前导零。当您的日期为“0001-01-01”时对其进行测试。您的月份将始终减 1,因为 Date.getMonth() 在一月份返回 0。
【解决方案5】:

您想要实现的目标可以使用原生 JavaScript 来实现。对象 Date 具有生成您想要的输出的方法。
以下是代码示例:

var d = new Date();
console.log(d);
>>> Sun Jan 28 2018 08:28:04 GMT+0000 (GMT)
console.log(d.toLocaleDateString());
>>> 1/28/2018
console.log(d.toLocaleString());
>>> 1/28/2018, 8:28:04 AM

真的没有必要重新发明轮子。

【讨论】:

    【解决方案6】:

    另一种方式:

    var today = new Date().getFullYear()+'-'+("0"+(new Date().getMonth()+1)).slice(-2)+'-'+("0"+new Date().getDate()).slice(-2)
    document.getElementById("today").innerHTML = today
    <div id="today">

    【讨论】:

      【解决方案7】:

      这是我创建的一个简单函数,当我继续从事一个项目时,我经常需要以这种格式获取今天、昨天和明天的日期。

      function returnYYYYMMDD(numFromToday = 0){
        let d = new Date();
        d.setDate(d.getDate() + numFromToday);
        const month = d.getMonth() < 9 ? '0' + (d.getMonth() + 1) : d.getMonth() + 1;
        const day = d.getDate() < 10 ? '0' + d.getDate() : d.getDate();
        return `${d.getFullYear()}-${month}-${day}`;
      }
      
      console.log(returnYYYYMMDD(-1)); // returns yesterday
      console.log(returnYYYYMMDD()); // returns today
      console.log(returnYYYYMMDD(1)); // returns tomorrow
      

      可以很容易地修改为传递一个日期,但是在这里你传递一个数字,它会从今天返回那么多天。

      【讨论】:

      • 还缺少添加到年份的前导零,因为有人可能使用的年份少于 4 位数。
      • @ErroneousFatality 好点,但正如我在回答中开头的那样,这是我如何获取今天/明天/昨天/等日期的示例。所以除非 OP 是时间旅行者……
      【解决方案8】:

      通过使用Moment.js 库,您可以:

      var datetime = new Date("2015-09-17 15:00:00");
      datetime = moment(datetime).format("YYYY-MM-DD");
      

      【讨论】:

        【解决方案9】:
        var today = new Date();
        
        function formatDate(date) {
         var dd = date.getDate();
                var mm = date.getMonth() + 1; //January is 0!
                var yyyy = date.getFullYear();
                if (dd < 10) {
                  dd = '0' + dd;
                }
                if (mm < 10) {
                  mm = '0' + mm;
                }
                //return dd + '/' + mm + '/' + yyyy;
                     return yyyy + '/' + mm + '/' +dd ;
        
        }
        
        console.log(formatDate(today));
        

        【讨论】:

          【解决方案10】:

          如果您不反对添加小型库,Date-Mirror(NPM 或 unpkg)允许您将 YYYY-MM-DD 中的现有日期格式化为您想要的任何日期字符串格式。

          date('n/j/Y', '2020-02-07') // 2/7/2020
          date('n/j/Y g:iA', '2020-02-07 4:45PM') // 2/7/2020 4:45PM
          date('n/j [until] n/j', '2020-02-07', '2020-02-08') // 2/7 until 2/8
          
          

          免责声明:我开发了 Date-Mirror。

          【讨论】:

            猜你喜欢
            • 2016-01-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-09
            • 1970-01-01
            • 1970-01-01
            • 2020-10-29
            • 1970-01-01
            相关资源
            最近更新 更多