如何以 YYYY-MM-DD 格式获取日期?

33

通常,如果我想获取日期,我可以执行以下操作:

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

问题在于,当我运行该代码时,它会返回:

Mon Aug 24 2015 4:20:00 GMT-0800 (Pacific Standard Time)

我如何使Date()方法返回一个"MM-DD-YYYY"格式的值,以便返回以下结果:

8/24/2015

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

8/24/2016 4:20


3
我建议在你的 JavaScript 日期需求中使用 http://momentjs.com/,它会让所有事情变得更加容易。 - house9
2
可能是重复的问题:如何格式化JavaScript日期 - Felipe Oriani
7
在UTC时区,d.toISOString().split('T')[0]的意思是将日期对象d转换为ISO格式的字符串,并将其按照'T'字符拆分为两部分,然后返回第一部分(即只包含日期信息的部分)。 - Paul S.
d.toLocaleDateString()怎么样?这将给你与你第一个示例完全相同的结果。 - cezar
1
我简直不敢相信一个如此简单的请求居然无法通过Javascript原生函数解决。 - Zhang Buzz
15个回答

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

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

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

16
请注意,结果将显示为_UTC(GMT+0000)_时间,而不是客户端所在的本地时区(例如_GMT-0700_)。 - Paul S.
4
警告!由于此方法将日期转换为UTC,因此生成的字符串将固执地加上或减去一天,具体取决于您的时区和当天的时间。因此,这并不是最佳解决方案,令人感到非常烦恼。 - JakeMc

12
下面的代码是一种实现方法。如果你有一个日期,请将其传递给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

3
x < 10 比使用 .split.toString 更加便宜。 - Paul S.
是的,因为月份从0开始计数。1月=0,2月=1。如果你想让1月=1,2月=2,那么我们需要将值加1。 - Starfish
为什么要使用.toString() - rlatief

8
另一种方法:

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

'YYYY-MM-DD' 的一行解决方案

new Date().toLocaleDateString("fr-CA", {year:"numeric", month: "2-digit", day:"2-digit"})

// 2023年除夕夜的输出:'2023-12-31'


我见过的最优雅的一个 - mWang
1
看起来你可以直接使用 new Date().toLocaleDateString("en-CA") .. 你还可以指定一个时区,将日期更改为其他地方的本地日期,例如 new Date().toLocaleDateString("en-CA", { timeZone: "Australia/Sydney"}) - som

5
通过使用Moment.js库,您可以进行以下操作:
var datetime = new Date("2015-09-17 15:00:00");
datetime = moment(datetime).format("YYYY-MM-DD");

2
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));

1
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"));

2
请添加解释。仅提供代码答案并没有太大的帮助。 - cezar
这段代码存在两个问题,无法正常工作:
  1. 它无法生成 yyyy-mm-dd 格式,因为你没有在年、月和日期前添加前导零。当日期为 "0001-01-01" 时,请测试它。
  2. 由于 Date.getMonth() 返回 0 表示一月,所以你的月份始终会减少 1。
- ErroneousFatality

1

这将把 Unix 时间戳转换为本地日期(加时间)

function UnixTimeToLocalDate = function( unix_epoch_time )
{
    var date,
        str;
        
    date = new Date( unix_epoch_time * 1000 );
    
    str = date.getFullYear() + '-' +
          (date.getMonth() + 1 + '').padStart( 2, '0' )  + '-' +
          (date.getDate() + '').padStart( 2, '0' );

    // If you need hh:mm:ss too then

    str += ' ' +
          (date.getHours()   + '').padStart( 2, '0' ) + ':' +
          (date.getMinutes() + '').padStart( 2, '0' ) + ':' +
          (date.getSeconds() + '').padStart( 2, '0' );
          
    return str;
}

1

如果您不介意添加一个小型库,Date-Mirror(NPMunpkg)可以让您将现有的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。


0
您想要实现的目标可以使用原生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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接