从JS日期对象获取YYYYMMDD格式的字符串?

时间:2010-06-18 00:54:12

标签: javascript date

我正在尝试使用JS将date object转换为YYYYMMDD格式的字符串。有没有比连接Date.getYear()Date.getMonth()Date.getDay()更简单的方法?

49 个答案:

答案 0 :(得分:568)

我经常使用的一段代码:

Date.prototype.yyyymmdd = function() {
  var mm = this.getMonth() + 1; // getMonth() is zero-based
  var dd = this.getDate();

  return [this.getFullYear(),
          (mm>9 ? '' : '0') + mm,
          (dd>9 ? '' : '0') + dd
         ].join('');
};

var date = new Date();
date.yyyymmdd();

答案 1 :(得分:281)

我不喜欢添加原型。另一种选择是:

var rightNow = new Date();
var res = rightNow.toISOString().slice(0,10).replace(/-/g,"");

<!-- Next line is for code snippet output only -->
document.body.innerHTML += res;

答案 2 :(得分:155)

您可以使用toISOString函数:

var today = new Date();
today.toISOString().substring(0, 10);

它会给你一个&#34; yyyy-mm-dd&#34;格式。

答案 3 :(得分:114)

Moment.js可能是你的朋友

var date = new Date();
var formattedDate = moment(date).format('YYYYMMDD');

答案 4 :(得分:35)

如果您不需要纯JS解决方案,可以使用jQuery UI来完成这样的工作:

$.datepicker.formatDate('yymmdd', new Date());

我通常不喜欢导入太多的库。但是jQuery UI非常有用,你可能会在项目的其他地方使用它。

访问http://api.jqueryui.com/datepicker/了解更多示例

答案 5 :(得分:32)

这是一行代码,您可以使用它来创建今天日期的YYYY-MM-DD字符串。

var d = new Date().toISOString().slice(0,10);

答案 6 :(得分:23)

除了o-o的答案之外,我还建议将逻辑操作与返回分开,并将它们作为三元组放在变量中。

另外,使用composer self-update确保变量的安全连接

concat()

RiZKiT建议的更多干小提琴

https://jsfiddle.net/EricHerlitz/tuhhfxz9/

答案 7 :(得分:18)

new Date('Jun 5 2016').
  toLocaleString('en-us', {year: 'numeric', month: '2-digit', day: '2-digit'}).
  replace(/(\d+)\/(\d+)\/(\d+)/, '$3-$1-$2');

// => '2016-06-05'

答案 8 :(得分:16)

我不喜欢修改本机对象,我认为乘法比填充接受解决方案的字符串更清晰。

function yyyymmdd(dateIn) {
   var yyyy = dateIn.getFullYear();
   var mm = dateIn.getMonth()+1; // getMonth() is zero-based
   var dd  = dateIn.getDate();
   return String(10000*yyyy + 100*mm + dd); // Leading zeros for mm and dd
}

var today = new Date();
console.log(yyyymmdd(today));

小提琴:http://jsfiddle.net/gbdarren/Ew7Y4/

答案 9 :(得分:13)

普通JS(ES5)解决方案,没有任何可能的日期跳转问题,这是由UTC中的Date.toISOString()打印引起的:

var now = new Date();
var todayUTC = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()));
return todayUTC.toISOString().slice(0, 10).replace(/-/g, '');

这是对@weberste对@Pierre Guilbert回答的评论。

答案 10 :(得分:12)

当地时间:

var date = new Date();
date = date.toJSON().slice(0, 10);

UTC时间:

var date = new Date().toISOString();
date = date.substring(0, 10);

日期将在我撰写本文时今天打印2020-06-15。

toISOString()方法返回ISO标准为YYYY-MM-DDTHH:mm:ss.sssZ

的日期。

该代码采用了YYYY-MM-DD格式所需的前10个字符。

如果要不带'-'的格式,请使用:

var date = new Date();
date = date.toJSON().slice(0, 10).split`-`.join``;

在.join``中,您可以添加空格,点或任何您想要的内容。

答案 11 :(得分:10)

&#13;
&#13;
// UTC/GMT 0
document.write('UTC/GMT 0: ' + (new Date()).toISOString().slice(0, 19).replace(/[^0-9]/g, "")); // 20150812013509

// Client local time
document.write('<br/>Local time: ' + (new Date(Date.now()-(new Date()).getTimezoneOffset() * 60000)).toISOString().slice(0, 19).replace(/[^0-9]/g, "")); // 20150812113509
&#13;
&#13;
&#13;

答案 12 :(得分:8)

var someDate = new Date();
var dateFormated = someDate.toISOString().substr(0,10);

console.log(dateFormated);

答案 13 :(得分:6)

您只需使用此一行代码即可获得年度日期

var date = new Date().getFullYear() + "-" + (parseInt(new Date().getMonth()) + 1) + "-" + new Date().getDate();

答案 14 :(得分:6)

另一种方法是将toLocaleDateString与具有big-endian date format standard的区域设置一起使用,例如瑞典,立陶宛,匈牙利,韩国,......:

date.toLocaleDateString('se')

删除分隔符(-)只需更换非数字:

&#13;
&#13;
console.log( new Date().toLocaleDateString('se').replace(/\D/g, '') );
&#13;
&#13;
&#13;

这没有您可以通过UTC日期格式获得的潜在错误:与当地时区的日期相比,UTC日期可能会休息一天。

答案 15 :(得分:5)

此线程https://stackoverflow.com/a/3067896/5437379中最受欢迎的答案的简化版本:

function toYYYYMMDD(d) {
    var yyyy = d.getFullYear().toString();
    var mm = (d.getMonth() + 101).toString().slice(-2);
    var dd = (d.getDate() + 100).toString().slice(-2);
    return yyyy + mm + dd;
}

答案 16 :(得分:5)

此代码修复了Pierre Guilbert的回答:

(即使在10000年后仍然有效)

YYYYMMDD=new Date().toISOString().slice(0,new Date().toISOString().indexOf("T")).replace(/-/g,"")

答案 17 :(得分:4)

这个人在这里=&gt; http://blog.stevenlevithan.com/archives/date-time-format为Javascript的format()对象编写了Date函数,因此可以使用熟悉的文字格式。

如果您需要在应用的Javascript中使用完整功能的日期格式,请使用它。否则,如果您想要做的是一次性,那么连接getYear(),getMonth(),getDay()可能是最简单的。

答案 18 :(得分:3)

[day,,month,,year]= Intl.DateTimeFormat(undefined, { year: 'numeric', month: '2-digit', day: '2-digit' }).formatToParts(new Date()),year.value+month.value+day.value

new Date().toJSON().slice(0,10).replace(/\/|-/g,'')

答案 19 :(得分:3)

Day.js 如何?

只有2KB,您也可以dayjs().format('YYYY-MM-DD')

https://github.com/iamkun/dayjs

答案 20 :(得分:3)

如果使用AngularJs(最多1.5),您可以使用date filter

var formattedDate = $filter('date')(myDate, 'yyyyMMdd')

答案 21 :(得分:3)

似乎mootools提供Date().format()https://mootools.net/more/docs/1.6.0/Types/Date

我不确定是否值得为这项特殊任务而包括。

答案 22 :(得分:3)

dateformat是一个非常常用的软件包,我发现它比moment.js更强大,更易于使用。

如何使用:

从NPM下载并安装dateformat。在你的模块中需要它:

var dateFormat = require('dateformat');

然后只是格式化你的东西:

var myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');

答案 23 :(得分:3)

当我需要这样做时,我通常会使用下面的代码。

var date = new Date($.now());
var dateString = (date.getFullYear() + '-'
    + ('0' + (date.getMonth() + 1)).slice(-2)
    + '-' + ('0' + (date.getDate())).slice(-2));
console.log(dateString); //Will print "2015-09-18" when this comment was written

为了解释,.slice(-2)给出了字符串的最后两个字符。

所以无论如何,我们都可以添加&#34; 0&#34;到了白天或月,只要求最后两个,因为那些总是我们想要的两个。

因此,如果MyDate.getMonth()返回9,那么它将是:

("0" + "9") // Giving us "09"

所以添加.slice(-2)就可以得到最后两个字符:

("0" + "9").slice(-2)

"09"

但是如果date.getMonth()返回10,那么它将是:

("0" + "10") // Giving us "010"

所以添加.slice(-2)会给我们最后两个字符,或者:

("0" + "10").slice(-2)

"10"

答案 24 :(得分:3)

根据@ o-o的回答,这将根据格式字符串返回日期的字符串。您可以轻松地为年份添加2位数年份正则表达式。毫秒,等等,如果你需要它们。

Date.prototype.getFromFormat = function(format) {
    var yyyy = this.getFullYear().toString();
    format = format.replace(/yyyy/g, yyyy)
    var mm = (this.getMonth()+1).toString(); 
    format = format.replace(/mm/g, (mm[1]?mm:"0"+mm[0]));
    var dd  = this.getDate().toString();
    format = format.replace(/dd/g, (dd[1]?dd:"0"+dd[0]));
    var hh = this.getHours().toString();
    format = format.replace(/hh/g, (hh[1]?hh:"0"+hh[0]));
    var ii = this.getMinutes().toString();
    format = format.replace(/ii/g, (ii[1]?ii:"0"+ii[0]));
    var ss  = this.getSeconds().toString();
    format = format.replace(/ss/g, (ss[1]?ss:"0"+ss[0]));
    return format;
};

d = new Date();
var date = d.getFromFormat('yyyy-mm-dd hh:ii:ss');
alert(date);

我不知道效率如何,尤其是因为它使用了很多正则表达式。它可能会使用一些我不掌握纯js的作品。

答案 25 :(得分:2)

最短

.toJSON().slice(0,10).split`-`.join``;

let d = new Date();

let s = d.toJSON().slice(0,10).split`-`.join``;

console.log(s);

答案 26 :(得分:2)

如果你不介意包含一个额外的(但很小的)库,Sugar.js提供了很多很好的功能,可以在JavaScript中使用dates。 要格式化日期,请使用format功能:

new Date().format("{yyyy}{MM}{dd}")

答案 27 :(得分:2)

date-shortcode救援!

const dateShortcode = require('date-shortcode')
dateShortcode.parse('{YYYYMMDD}', new Date())
//=> '20180304'

答案 28 :(得分:2)

为Simplicity&amp;而回答另一个人可读性。
此外,不鼓励使用新方法编辑现有的预定义类成员:

function getDateInYYYYMMDD() {
    let currentDate = new Date();

    // year
    let yyyy = '' + currentDate.getFullYear();

    // month
    let mm = ('0' + (currentDate.getMonth() + 1));  // prepend 0 // +1 is because Jan is 0
    mm = mm.substr(mm.length - 2);                  // take last 2 chars

    // day
    let dd = ('0' + currentDate.getDate());         // prepend 0
    dd = dd.substr(dd.length - 2);                  // take last 2 chars

    return yyyy + "" + mm + "" + dd;
}

var currentDateYYYYMMDD = getDateInYYYYMMDD();
console.log('currentDateYYYYMMDD: ' + currentDateYYYYMMDD);

答案 29 :(得分:1)

从ES6开始,您可以使用模板字符串使其更短一些:

var now = new Date();
var todayString = `${now.getFullYear()}-${now.getMonth()}-${now.getDate()}`;

此解决方案不会将填充置零。寻找其他好的答案,看看如何做到这一点。

答案 30 :(得分:1)

使用 padStart

Date.prototype.yyyymmdd = function() {
    return [
        this.getFullYear(),
        (this.getMonth()+1).toString().padStart(2, '0'), // getMonth() is zero-based
        this.getDate().toString().padStart(2, '0')
    ].join('-');
};

答案 31 :(得分:1)

这是一种更通用的方法,它允许 date time 组件,并且可以作为数字或字符串进行相同的排序。

根据Date ISO格式的数字顺序,转换为本地时区并删除非数字。即:

// monkey patch version
Date.prototype.IsoNum = function (n) {
    var tzoffset = this.getTimezoneOffset() * 60000; //offset in milliseconds
    var localISOTime = (new Date(this - tzoffset)).toISOString().slice(0,-1);
    return localISOTime.replace(/[-T:\.Z]/g, '').substring(0,n || 20); // YYYYMMDD
}

<强>用法

var d = new Date();
// Tue Jul 28 2015 15:02:53 GMT+0200 (W. Europe Daylight Time)
console.log(d.IsoNum(8));  // "20150728"
console.log(d.IsoNum(12)); // "201507281502"
console.log(d.IsoNum());   // "20150728150253272"

答案 32 :(得分:1)

原生Javascript:

new Date().toLocaleString('zu-ZA').slice(0,10).replace(/-/g,'');

答案 33 :(得分:1)

&#13;
&#13;
yyyymmdd=x=>(f=x=>(x<10&&'0')+x,x.getFullYear()+f(x.getMonth()+1)+f(x.getDate()));
alert(yyyymmdd(new Date));
&#13;
&#13;
&#13;

答案 34 :(得分:0)

当然,您可以为日期字符串表示形式的每个变体构建一个特定的函数。如果您考虑使用国际日期格式,那么您会发现许多带有冗长名称且难以区分的特定功能。

没有可以匹配所有格式的合理函数,但是有一个合理的函数组合可以做到:

const pipe2 = f => g => x =>
  g(f(x));

const pipe3 = f => g => h => x =>
  h(g(f(x)));

const invoke = (method, ...args) => o =>
  o[method] (...args);

const padl = (c, n) => s =>
  c.repeat(n)
    .concat(s)
    .slice(-n);

const inc = n => n + 1;

// generic format date function

const formatDate = stor => (...args) => date =>
  args.map(f => f(date))
    .join(stor);

// MAIN

const toYYYYMMDD = formatDate("") (
  invoke("getFullYear"),
  pipe3(invoke("getMonth")) (inc) (padl("0", 2)),
  pipe2(invoke("getDate")) (padl("0", 2)));

console.log(toYYYYMMDD(new Date()));

是的,这是很多代码。但是,您可以通过简单地更改传递给高阶函数formatDate的函数参数来表示每个字符串日期表示形式。一切都是明确的和声明性的,即,您几乎可以阅读正在发生的事情。

答案 35 :(得分:0)

我希望此功能有用

function formatDate(dDate,sMode){       
        var today = dDate;
        var dd = today.getDate();
        var mm = today.getMonth()+1; //January is 0!
        var yyyy = today.getFullYear();
        if(dd<10) {
            dd = '0'+dd
        } 
        if(mm<10) {
            mm = '0'+mm
        } 
        if (sMode+""==""){
            sMode = "dd/mm/yyyy";
        }
        if (sMode == "yyyy-mm-dd"){
            return  yyyy + "-" + mm + "-" + dd + "";
        }
        if (sMode == "dd/mm/yyyy"){
            return  dd + "/" + mm + "/" + yyyy;
        }

    }

答案 36 :(得分:0)

您可以如下创建自己的功能

function toString(o, regex) {
    try {
        if (!o) return '';
        if (typeof o.getMonth === 'function' && !!regex) {
            let splitChar = regex.indexOf('/') > -1 ? '/' : regex.indexOf('-') > -1 ? '-' : regex.indexOf('.') > -1 ? '.' : '';
            let dateSeparate = regex.split(splitChar);
            let result = '';
            for (let item of dateSeparate) {
                let val = '';
                switch (item) {
                    case 'd':
                        val = o.getDate();
                        break;
                    case 'dd':
                        val = this.date2Char(o.getDate());
                        break;
                    case 'M':
                        val = o.getMonth() + 1;
                        break;
                    case 'MM':
                        val = this.date2Char(o.getMonth() + 1);
                        break;
                    case 'yyyy':
                        val = o.getFullYear();
                        break;
                    case 'yy':
                        val = this.date2Char(o.getFullYear());
                        break;
                    default:
                        break;
                }
                result += val + splitChar;
            }
            return result.substring(0, result.length - 1);
        } else {
            return o.toString();
        }
    } catch(ex) { return ''; }
}

function concatDateToString(args) {
    if (!args.length) return '';
    let result = '';
    for (let i = 1; i < args.length; i++) {
        result += args[i] + args[0];
    }
    return result.substring(0, result.length - 1);
}

function date2Char(d){
    return this.rightString('0' + d);
}

function rightString(o) {
    return o.substr(o.length - 2);
}

使用过:

var a = new Date();
console.log('dd/MM/yyyy: ' + toString(a, 'dd/MM/yyyy'));
console.log('MM/dd/yyyy: ' + toString(a, 'MM/dd/yyyy'));
console.log('dd/MM/yy: ' + toString(a, 'dd/MM/yy'));
console.log('MM/dd/yy: ' + toString(a, 'MM/dd/yy'));

答案 37 :(得分:0)

这里的很多答案都使用 toisostring 函数。此函数在输出前将时间转换为zulu时间,这可能会导致问题。

function datestring(time) {
    return new Date(time.getTime() - time.getTimezoneOffset()*60000).toISOString().slice(0,10).replace(/-/g,"")
}

mydate = new Date("2018-05-03")
console.log(datestring(mydate))

日期字符串函数修复了时区问题,或者更好的是您可以通过在祖鲁时间工作来避免整个问题:

mydate = new Date("2018-05-03Z")
// mydate = new Date(Date.UTC(2018,5,3))
console.log(mydate.toISOString().slice(0,10).replace(/-/g,""))

答案 38 :(得分:0)

要以YYYYMMDD格式获取本地日期,请使用:

var todayDate = (new Date()).toLocaleString('en-GB').slice(0,10).split("\/").reverse().join("");

答案 39 :(得分:0)

@ o-o解决方案在我的情况下不起作用。 我的解决方案如下:

Date.prototype.yyyymmdd = function() {
  var mm = this.getMonth() + 1; // getMonth() is zero-based
  var dd = this.getDate();
  var ret = [this.getFullYear(), (mm<10)?'0':'', mm, (dd<10)?'0':'', dd].join('');

  return ret; // padding
};

答案 40 :(得分:0)

很好,很简单:

FIRApp.configure()

答案 41 :(得分:0)

我尝试编写一个简单的库来操作JavaScript日期对象。你可以试试这个。

var dateString = timeSolver.getString(date, "YYYYMMDD")

这里的图书馆: https://github.com/sean1093/timeSolver

答案 42 :(得分:0)

Date.js有很多有用的日期解析方法。

require("datejs")

(new Date()).toString("yyyyMMdd")

答案 43 :(得分:0)

这篇文章帮我写了这个帮手,所以我分享一下,以防万一 正在寻找这个解决方案,它支持yyyy,mm,dd的所有变化

Date.prototype.formattedDate = function (pattern) {
    formattedDate = pattern.replace('yyyy', this.getFullYear().toString());
    var mm = (this.getMonth() + 1).toString(); // getMonth() is zero-based
    mm = mm.length > 1 ? mm : '0' + mm;
    formattedDate = formattedDate.replace('mm', mm);
    var dd = this.getDate().toString();
    dd = dd.length > 1 ? dd : '0' + dd;
    formattedDate = formattedDate.replace('dd', dd);
    return formattedDate;
};

d = new Date();
pattern = 'yyyymmdd';  // 20150813
d.formattedDate(pattern);

pattern = 'yyyy-mm-dd';
d.formattedDate(pattern); // 2015-08-13

答案 44 :(得分:0)

Try this:

function showdate(){

var a = new Date();
var b = a.getFullYear();
var c = a.getMonth();
(++c < 10)? c = "0" + c : c;
var d = a.getDate();
(d < 10)? d = "0" + d : d;
var final = b + "-" + c + "-" + d; 

return final;


} 

document.getElementById("todays_date").innerHTML = showdate();

答案 45 :(得分:0)

以下是对https://stackoverflow.com/users/318563/o-o

的答案的一点改进
Date.prototype.ddmmyyyy = function(delimiter) {
    var yyyy = this.getFullYear().toString();
    var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based
    var dd  = this.getDate().toString();
    return (dd[1]?dd:"0"+dd[0]) + delimiter + (mm[1]?mm:"0"+mm[0]) + delimiter +yyyy  ; // padding
};

希望对任何人都有帮助!

:)

答案 46 :(得分:-1)

<pre>Date.prototype.getFromFormat = function(format) {
    var yyyy = this.getFullYear().toString();
    format = format.replace(/yyyy/g, yyyy)
    var mm = (this.getMonth()+1).toString(); 
    format = format.replace(/mm/g, (mm[1]?mm:"0"+mm[0]));
    var dd  = this.getDate().toString();
    format = format.replace(/dd/g, (dd[1]?dd:"0"+dd[0]));
    var hh = this.getHours().toString();
    format = format.replace(/hh/g, (hh[1]?hh:"0"+hh[0]));
    var ii = this.getMinutes().toString();
    format = format.replace(/ii/g, (ii[1]?ii:"0"+ii[0]));
    var ss  = this.getSeconds().toString();
    format = format.replace(/ss/g, (ss[1]?ss:"0"+ss[0]));
    var ampm = (hh >= 12) ? "PM" : "AM";
    format = format.replace(/ampm/g, (ampm[1]?ampm:"0"+ampm[0]));
    return format;
};
var time_var = $('#899_TIME');
var myVar = setInterval(myTimer, 1000);
function myTimer() {
    var d = new Date(); 
    var date = d.getFromFormat('dd-mm-yyyy hh:ii:ss:ampm');
    time_var.text(date);

} </pre>

use the code and get the output like **26-07-2017 12:29:34:PM**

check the below link for your reference

https://parthiban037.wordpress.com/2017/07/26/date-and-time-format-in-oracle-apex-using-javascript/ 

答案 47 :(得分:-1)

position: fixed

这将显示像2016年11月9日星期三,10:57:00

的字符串

答案 48 :(得分:-1)

这是一个简单的小函数,它易于阅读并避免使用局部变量,这些变量可能是JavaScript中的时间接收器。我不使用原型来改变标准模块,因为它污染了命名空间,并且可能导致代码无法按照您的想法进行操作。

主要功能有一个愚蠢的名字,但它可以解决这个问题。

function dateToYYYYMMDDhhmmss(date) {
    function pad(num) {
        num = num + '';
        return num.length < 2 ? '0' + num : num;
    }
    return date.getFullYear() + '/' +
        pad(date.getMonth() + 1) + '/' +
        pad(date.getDate()) + ' ' +
        pad(date.getHours()) + ':' +
        pad(date.getMinutes()) + ':' +
        pad(date.getSeconds());
}