将JavaScript日期格式化为yyyy-mm-dd

时间:2014-05-11 13:13:17

标签: javascript date formatting date-format time-format

大家好我有一个日期格式Sun May 11,2014如何在javascript中将它转换为2014-05-11。

function taskDate(dateMilli) {
    var d = (new Date(dateMilli) + '').split(' ');
    d[2] = d[2] + ',';

    return [d[0], d[1], d[2], d[3]].join(' ');
}
var datemilli = Date.parse('Sun May 11,2014');
taskdate(datemilli);

上面的代码给了我相同的日期格式sun sun 11,2014请帮忙

45 个答案:

答案 0 :(得分:340)

你可以做到

function formatDate(date) {
    var d = new Date(date),
        month = '' + (d.getMonth() + 1),
        day = '' + d.getDate(),
        year = d.getFullYear();

    if (month.length < 2) month = '0' + month;
    if (day.length < 2) day = '0' + day;

    return [year, month, day].join('-');
}

用法示例:

alert(formatDate('Sun May 11,2014'));

输出:

2014-05-11

小提琴演示:http://jsfiddle.net/abdulrauf6182012/2Frm3/

答案 1 :(得分:280)

只需利用内置的toISOString方法,即可将日期设置为ISO 8601格式。

yourDate.toISOString().split('T')[0]

其中yourDate是您的日期对象。

答案 2 :(得分:82)

我用这种方式获取yyyy-mm-dd格式的日期:)

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

答案 3 :(得分:54)

将日期转换为yyyy-mm-dd格式的最简单方法是:

var date = new Date("Sun May 11,2014");
var dateString = new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))
                    .toISOString()
                    .split("T")[0];

工作原理:

  • new Date("Sun May 11,2014")将字符串"Sun May 11,2014"转换为日期对象,该日期对象根据当前区域设置(主机系统设置)在时区中表示时间Sun May 11 2014 00:00:00
  • new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))通过减去时区偏移量将您的日期转换为与UTC(标准时间)中的时间Sun May 11 2014 00:00:00对应的日期对象
  • .toISOString()将日期对象转换为ISO 8601字符串2014-05-11T00:00:00.000Z
  • .split("T")将字符串拆分为数组["2014-05-11", "00:00:00.000Z"]
  • [0]获取该数组的第一个元素

演示

var date = new Date("Sun May 11,2014");
var dateString = new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))
                    .toISOString()
                    .split("T")[0];

console.log(dateString);

答案 4 :(得分:42)

2020年答案

您可以使用本机.toLocaleDateString()函数,该函数支持几种有用的参数,例如 locale (选择MM / DD / YYYY或YYYY / MM / DD等格式),时区(用于转换日期)和格式化详细信息选项(例如:1 vs 01 vs January)。

示例

new Date().toLocaleDateString() // 8/19/2020

new Date().toLocaleDateString('en-US', {year: 'numeric', month: '2-digit', day: '2-digit'}); // 08/19/2020 (month and day with two digits)

new Date().toLocaleDateString('en-ZA'); // 2020/08/19 (year/month/day) notice the different locale

new Date().toLocaleDateString('en-CA'); // 2020-08-19 (year-month-day) notice the different locale

new Date().toLocaleString("en-US", {timeZone: "America/New_York"}); // 8/19/2020, 9:29:51 AM. (date and time in a specific timezone)

new Date().toLocaleString("en-US", {hour: '2-digit', hour12: false, timeZone: "America/New_York"});  // 09 (just the hour)

请注意,有时要以您特定的需求格式输出日期,您必须找到与该格式兼容的语言环境。 您可以在此处找到语言环境示例:https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_tolocalestring_date_all

请注意,语言环境只是更改格式,如果要将特定日期转换为特定的国家或城市时间,则需要使用时区参数

答案 5 :(得分:28)

format = function date2str(x, y) {
    var z = {
        M: x.getMonth() + 1,
        d: x.getDate(),
        h: x.getHours(),
        m: x.getMinutes(),
        s: x.getSeconds()
    };
    y = y.replace(/(M+|d+|h+|m+|s+)/g, function(v) {
        return ((v.length > 1 ? "0" : "") + eval('z.' + v.slice(-1))).slice(-2)
    });

    return y.replace(/(y+)/g, function(v) {
        return x.getFullYear().toString().slice(-v.length)
    });
}

结果:

format(new Date('Sun May 11,2014'), 'yyyy-MM-dd')
"2014-05-11

答案 6 :(得分:22)

您可以在toLocaleDateString('fr-CA')对象上使用Date

console.log(new Date('Sun May 11,2014').toLocaleDateString('fr-CA'));

我还发现这些语言环境从该语言环境列表List of All Locales and Their Short Codes?

中给出了正确的结果
'en-CA'
'fr-CA'
'lt-LT'
'sv-FI'
'sv-SE'

var localesList = ["af-ZA",
  "am-ET",
  "ar-AE",
  "ar-BH",
  "ar-DZ",
  "ar-EG",
  "ar-IQ",
  "ar-JO",
  "ar-KW",
  "ar-LB",
  "ar-LY",
  "ar-MA",
  "arn-CL",
  "ar-OM",
  "ar-QA",
  "ar-SA",
  "ar-SY",
  "ar-TN",
  "ar-YE",
  "as-IN",
  "az-Cyrl-AZ",
  "az-Latn-AZ",
  "ba-RU",
  "be-BY",
  "bg-BG",
  "bn-BD",
  "bn-IN",
  "bo-CN",
  "br-FR",
  "bs-Cyrl-BA",
  "bs-Latn-BA",
  "ca-ES",
  "co-FR",
  "cs-CZ",
  "cy-GB",
  "da-DK",
  "de-AT",
  "de-CH",
  "de-DE",
  "de-LI",
  "de-LU",
  "dsb-DE",
  "dv-MV",
  "el-GR",
  "en-029",
  "en-AU",
  "en-BZ",
  "en-CA",
  "en-GB",
  "en-IE",
  "en-IN",
  "en-JM",
  "en-MY",
  "en-NZ",
  "en-PH",
  "en-SG",
  "en-TT",
  "en-US",
  "en-ZA",
  "en-ZW",
  "es-AR",
  "es-BO",
  "es-CL",
  "es-CO",
  "es-CR",
  "es-DO",
  "es-EC",
  "es-ES",
  "es-GT",
  "es-HN",
  "es-MX",
  "es-NI",
  "es-PA",
  "es-PE",
  "es-PR",
  "es-PY",
  "es-SV",
  "es-US",
  "es-UY",
  "es-VE",
  "et-EE",
  "eu-ES",
  "fa-IR",
  "fi-FI",
  "fil-PH",
  "fo-FO",
  "fr-BE",
  "fr-CA",
  "fr-CH",
  "fr-FR",
  "fr-LU",
  "fr-MC",
  "fy-NL",
  "ga-IE",
  "gd-GB",
  "gl-ES",
  "gsw-FR",
  "gu-IN",
  "ha-Latn-NG",
  "he-IL",
  "hi-IN",
  "hr-BA",
  "hr-HR",
  "hsb-DE",
  "hu-HU",
  "hy-AM",
  "id-ID",
  "ig-NG",
  "ii-CN",
  "is-IS",
  "it-CH",
  "it-IT",
  "iu-Cans-CA",
  "iu-Latn-CA",
  "ja-JP",
  "ka-GE",
  "kk-KZ",
  "kl-GL",
  "km-KH",
  "kn-IN",
  "kok-IN",
  "ko-KR",
  "ky-KG",
  "lb-LU",
  "lo-LA",
  "lt-LT",
  "lv-LV",
  "mi-NZ",
  "mk-MK",
  "ml-IN",
  "mn-MN",
  "mn-Mong-CN",
  "moh-CA",
  "mr-IN",
  "ms-BN",
  "ms-MY",
  "mt-MT",
  "nb-NO",
  "ne-NP",
  "nl-BE",
  "nl-NL",
  "nn-NO",
  "nso-ZA",
  "oc-FR",
  "or-IN",
  "pa-IN",
  "pl-PL",
  "prs-AF",
  "ps-AF",
  "pt-BR",
  "pt-PT",
  "qut-GT",
  "quz-BO",
  "quz-EC",
  "quz-PE",
  "rm-CH",
  "ro-RO",
  "ru-RU",
  "rw-RW",
  "sah-RU",
  "sa-IN",
  "se-FI",
  "se-NO",
  "se-SE",
  "si-LK",
  "sk-SK",
  "sl-SI",
  "sma-NO",
  "sma-SE",
  "smj-NO",
  "smj-SE",
  "smn-FI",
  "sms-FI",
  "sq-AL",
  "sr-Cyrl-BA",
  "sr-Cyrl-CS",
  "sr-Cyrl-ME",
  "sr-Cyrl-RS",
  "sr-Latn-BA",
  "sr-Latn-CS",
  "sr-Latn-ME",
  "sr-Latn-RS",
  "sv-FI",
  "sv-SE",
  "sw-KE",
  "syr-SY",
  "ta-IN",
  "te-IN",
  "tg-Cyrl-TJ",
  "th-TH",
  "tk-TM",
  "tn-ZA",
  "tr-TR",
  "tt-RU",
  "tzm-Latn-DZ",
  "ug-CN",
  "uk-UA",
  "ur-PK",
  "uz-Cyrl-UZ",
  "uz-Latn-UZ",
  "vi-VN",
  "wo-SN",
  "xh-ZA",
  "yo-NG",
  "zh-CN",
  "zh-HK",
  "zh-MO",
  "zh-SG",
  "zh-TW",
  "zu-ZA"
];

localesList.forEach(lcl => {
  if ("2014-05-11" === new Date('Sun May 11,2014').toLocaleDateString(lcl)) {
    console.log(lcl, new Date('Sun May 11,2014').toLocaleDateString(lcl));
  }
});

答案 7 :(得分:12)

一些答案​​的组合:

var d = new Date(date);
date = [
  d.getFullYear(),
  ('0' + (d.getMonth() + 1)).slice(-2),
  ('0' + d.getDate()).slice(-2)
].join('-');

答案 8 :(得分:10)

最短

.toJSON().slice(0,10);

var d = new Date('Sun May 11,2014' +' UTC');   // Parse as UTC
let str = d.toJSON().slice(0,10);              // Show as UTC

console.log(str);

答案 9 :(得分:7)

toISOString()假设您的日期是当地时间并将其转换为UTC。您将收到不正确的日期字符串。

以下方法应该返回您需要的内容。

Date.prototype.yyyymmdd = function() {         

    var yyyy = this.getFullYear().toString();                                    
    var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based         
    var dd  = this.getDate().toString();             

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

来源:https://blog.justin.kelly.org.au/simple-javascript-function-to-format-the-date-as-yyyy-mm-dd/

答案 10 :(得分:6)

如果您不反对使用库;您可以像这样使用moments.js库...

var now = new Date();
var dateString = moment(now).format('YYYY-MM-DD');

var dateStringWithTime = moment(now).format('YYYY-MM-DD HH:mm:ss');
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

答案 11 :(得分:4)

ES2018推出时(适用于chrome),您只需对其进行正则表达式

(new Date())
    .toISOString()
    .replace(
        /^(?<year>\d+)-(?<month>\d+)-(?<day>\d+)T.*$/,
        '$<year>-$<month>-$<day>'
    )

2020-07-14

或者,如果您希望使用没有任何库

(new Date())
    .toISOString()
    .match(
        /^(?<yyyy>\d\d(?<yy>\d\d))-(?<mm>0?(?<m>\d+))-(?<dd>0?(?<d>\d+))T(?<HH>0?(?<H>\d+)):(?<MM>0?(?<M>\d+)):(?<SSS>(?<SS>0?(?<S>\d+))\.\d+)(?<timezone>[A-Z][\dA-Z.-:]*)$/
    )
    .groups

导致提取以下内容

{
    H: "8"
    HH: "08"
    M: "45"
    MM: "45"
    S: "42"
    SS: "42"
    SSS: "42.855"
    d: "14"
    dd: "14"
    m: "7"
    mm: "07"
    timezone: "Z"
    yy: "20"
    yyyy: "2020"
}

您可以像这样使用replace(..., '$<d>/$<m>/\'$<yy> @ $<H>:$<MM>')而不是.match(...).groups来获取

14/7/'20 @ 8:45

答案 12 :(得分:4)

new Date().toLocaleDateString('pt-br').split( '/' ).reverse( ).join( '-' );

new Date().toISOString().split('T')[0]
new Date('23/03/2020'.split('/').reverse().join('-')).toISOString()
new Date('23/03/2020'.split('/').reverse().join('-')).toISOString().split('T')[0]

尝试一下!

答案 13 :(得分:4)

为什么不简单地使用这个

setTimeout(() => {$event.target.submit()}, 1000);

简单而甜蜜;)

答案 14 :(得分:4)

你可以试试这个:https://www.npmjs.com/package/timesolver

npm i timesolver

在您的代码中使用它:

const timeSolver = require('timeSolver');
const date = new Date();
const dateString = timeSolver.getString(date, "YYYY-MM-DD");

您可以使用此方法获取日期字符串:

  

的getString

希望这会对你有帮助!

答案 15 :(得分:3)

我建议使用类似https://github.com/brightbits/formatDate-js之类的内容,而不是每次都尝试复制它,只需使用支持所有主要strftime操作的库。

new Date().format("%Y-%m-%d")

答案 16 :(得分:3)

这些答案都没有让我满意。我想要一个跨平台的解决方案,让我在当地时区度过一天而不使用任何外部库。

这就是我提出的:

function localDay(time) {
  var minutesOffset = time.getTimezoneOffset()
  var millisecondsOffset = minutesOffset*60*1000
  var local = new Date(time - millisecondsOffset)
  return local.toISOString().substr(0, 10)
}

那应该以日期参考的时区以YYYY-MM-DD格式返回日期的日期。

因此,例如localDay(new Date("2017-08-24T03:29:22.099Z"))将返回"2017-08-23",即使它已经是UTC的第24位。

你需要polyfill Date.prototype.toISOString才能在IE8中运行,但是应该在其他地方支持它。

答案 17 :(得分:3)

如果您使用momentjs,现在它们包括a constant for that format YYYY-MM-DD

date.format(moment.HTML5_FMT.DATE)

答案 18 :(得分:3)

const formatDate = d => [
    d.getFullYear(),
    (d.getMonth() + 1).toString().padStart(2, '0'),
    d.getDate().toString().padStart(2, '0')
].join('-');

您可以使用padstart。

padStart(n,'0')确保字符串中至少包含n个字符,并在字符串前加上'0',直到达到该长度为止。

join('-')连接一个数组,在每个元素之间添加'-'符号。

getMonth()从0开始,因此为+1。

答案 19 :(得分:2)

不幸的是,JavaScript's Date objectmany pitfalls。任何基于 Date's builtin toISOString 的解决方案都必须与时区混淆,如该问题的其他一些答案所述。 Temporal.PlainDate from the Temporal proposal 给出了表示 ISO-8601 日期(没有时间)的干净解决方案。自 2021 年 2 月起,您必须选择最适合您的解决方法。

ggplot() + geom_segment(data=H1, size=7, show.legend=FALSE, aes(x=SAL, xend=SAL, y=HG, yend=pct, color=factor(HG))) + geom_point() + stat_smooth(method="glm", se= FALSE, method.args = list(family = "binomial"), aes(x=SAL, y=HG), data = mydata) + labs(x="Salinity [‰]", y="Predicted probability")+ scale_y_continuous(limits=c(-0.02,1.02)) + scale_x_continuous(limits=c(7,28)) + theme_bw(base_size=13.5) 与普通字符串连接一起使用

假设您的内部表示基于 Date,您可以执行手动字符串连接。以下代码避免了 Date 的一些陷阱(时区、从零开始的月份、缺少 2 位格式),但可能还有其他问题。

Date

function vanillaToDateOnlyIso8601() { // month May has zero-based index 4 const date = new Date(2014, 4, 11); const yyyy = date.getFullYear(); const mm = String(date.getMonth() + 1).padStart(2, "0"); // month is zero-based const dd = String(date.getDate()).padStart(2, "0"); if (yyyy < 1583) { // TODO: decide how to support dates before 1583 throw new Error(`dates before year 1583 are not supported`); } const formatted = `${yyyy}-${mm}-${dd}`; console.log("vanilla", formatted); } 与辅助库(例如 formatISO from date-fns)一起使用

这是一种流行的方法,但您仍然被迫将日历日期作为 Date, which represents

<块引用>

独立于平台的格式的单个时刻

不过,以下代码应该可以完成工作:

Date

找到一个能正确表示日期和时间的库

我希望有一个干净且经过实战考验的库,它可以带来自己精心设计的日期-时间表示。此问题中任务的一个有希望的候选者是 LocalDate from @js-joda/core,但图书馆不如 import { formatISO } from "date-fns"; function dateFnsToDateOnlyIso8601() { // month May has zero-based index 4 const date = new Date(2014, 4, 11); const formatted = formatISO(date, { representation: "date" }); console.log("date-fns", formatted); } 活跃。在处理一些示例代码时,我在添加可选的 date-fns 后也遇到了一些问题。

然而,核心功能在我看来非常有效:

@js-joda/timezone

实验Temporal-proposal polyfill

不建议将其用于生产,但您可以根据需要导入未来:

import { LocalDate, Month } from "@js-joda/core";

function jodaDateOnlyIso8601() {
  const someDay = LocalDate.of(2014, Month.MAY, 11);
  const formatted = someDay.toString();
  console.log("joda", formatted);
}

答案 20 :(得分:2)

还要考虑时区,这一班轮应该没有任何图书馆就可以了:

new Date().toLocaleString("en-IN", {timeZone: "Asia/Kolkata"}).split(',')[0]

答案 21 :(得分:1)

重新格式化日期字符串非常简单,例如

&#13;
&#13;
var s = 'Sun May 11,2014';

function reformatDate(s) {
  function z(n){return ('0' + n).slice(-2)}
  var months = [,'jan','feb','mar','apr','may','jun',
                 'jul','aug','sep','oct','nov','dec'];
  var b = s.split(/\W+/);
  return b[3] + '-' +
    z(months.indexOf(b[1].substr(0,3).toLowerCase())) + '-' +
    z(b[2]);
}

console.log(reformatDate(s));
&#13;
&#13;
&#13;

答案 22 :(得分:1)

function myYmd(D){
    var pad = function(num) {
        var s = '0' + num;
        return s.substr(s.length - 2);
    }
    var Result = D.getFullYear() + '-' + pad((D.getMonth() + 1)) + '-' + pad(D.getDate());
    return Result;
}

var datemilli = new Date('Sun May 11,2014');
document.write(myYmd(datemilli));

答案 23 :(得分:1)

Date.js很适合这个。

require("datejs")
(new Date()).toString("yyyy-MM-dd")

答案 24 :(得分:1)

function formatDate(date) {
    var year = date.getFullYear().toString();
    var month = (date.getMonth() + 101).toString().substring(1);
    var day = (date.getDate() + 100).toString().substring(1);
    return year + "-" + month + "-" + day;
}

alert(formatDate(new Date()));

答案 25 :(得分:1)

这对我来说可以用所需的格式(YYYYMMDD HH:MM:SS

var d = new Date();
var date1=d.getFullYear()+''+((d.getMonth()+1)<10?"0"+(d.getMonth()+1):(d.getMonth()+1))+''+(d.getDate()<10?"0"+d.getDate():d.getDate());
var time1=(d.getHours()<10?"0"+d.getHours():d.getHours())+':'+(d.getMinutes()<10?"0"+d.getMinutes():d.getMinutes())+':'+(d.getSeconds()<10?"0"+d.getSeconds():d.getSeconds());
print(date1+' '+time1);

答案 26 :(得分:1)

var d = new Date("Sun May 1,2014");

var year  = d.getFullYear();
var month = d.getMonth() + 1;
var day   = d.getDate(); 

month = checkZero(month);             
day   = checkZero(day);

var date = "";

date += year;
date += "-";
date += month;
date += "-";
date += day;

document.querySelector("#display").innerHTML = date;
    
function checkZero(i) 
{
    if (i < 10) 
    {
        i = "0" + i
    };  // add zero in front of numbers < 10

    return i;
}
<div id="display"></div>

答案 27 :(得分:0)

这是一种方法:

var date = Date.parse('Sun May 11,2014');

function format(date) {
  date = new Date(date);

  var day = ('0' + date.getDate()).slice(-2);
  var month = ('0' + (date.getMonth() + 1)).slice(-2);
  var year = date.getFullYear();

  return year + '-' + month + '-' + day;
}

console.log(format(date));

答案 28 :(得分:0)

此代码更改了DD MM YYYY的顺序

function convertDate(format, date) {
    let formatArray = format.split('/');
    if (formatArray.length != 3) {
        console.error('Use a valid Date format');
        return;
    }
    function getType(type) { return type == 'DD' ? d.getDate() : type == 'MM' ? d.getMonth() + 1 : type == 'YYYY' && d.getFullYear(); }
    function pad(s) { return (s < 10) ? '0' + s : s; }
    var d = new Date(date);
    return [pad(getType(formatArray[0])), pad(getType(formatArray[1])), getType(formatArray[2])].join('/');
}

答案 29 :(得分:0)

const today = new Date(); // or whatever 

const yearFirstFormater = (date): string => {
    const modifiedDate = new Date(date).toISOString().slice(0, 10);
    return `${modifiedDate.split('-')[0]}/${modifiedDate.split('-')[1]}/${modifiedDate.split('-')[2]}`;
}

const monthFirstFormater = (date): string => {
    const modifiedDate = new Date(date).toISOString().slice(0, 10);
    return `${modifiedDate.split('-')[1]}/${modifiedDate.split('-')[2]}/${modifiedDate.split('-')[0]}`;
}

const dayFirstFormater = (date): string => {
    const modifiedDate = new Date(date).toISOString().slice(0, 10);
    return `${modifiedDate.split('-')[2]}/${modifiedDate.split('-')[1]}/${modifiedDate.split('-')[0]}`;
}

console.log(yearFirstFormater(today));
console.log(monthFirstFormater(today));
console.log(dayFirstFormater(today));

答案 30 :(得分:0)

跟进 https://stackoverflow.com/a/29774197/1189762 这是我必须更改的关于人们相对格林威治标准时间向东或向西的偏移量:

export const toNativeHtml5InputDate = (date) => {
  if (!date) return date;

  let offset = new Date(date).getTimezoneOffset();

  offset =
    offset < 0
      ? offset * -1 // east from Greenwich Mean Time
      : offset; // west from Greenwich Mean Time

  return new Date(new Date(date).getTime() + offset * 60 * 1000)
    .toISOString()
    .split('T')[0];
};

答案 31 :(得分:0)

PHP兼容的日期格式

这是一个小函数,可以采用与PHP函数date()相同的参数,并以javascript返回日期/时间字符串。

请注意,并非支持PHP中的所有date()格式选项。您可以扩展parts对象以创建缺少的格式令牌

/** 
 * Date formatter with PHP "date()"-compatible format syntax.
 */
const formatDate = (format, date) => {
  if (!format) { format = 'Y-m-d' }
  if (!date) { date = new Date() }

  const parts = {
    Y: date.getFullYear().toString(),
    y: ('00' + (date.getYear() - 100)).toString().slice(-2),
    m: ('0' + (date.getMonth() + 1)).toString().slice(-2),
    n: (date.getMonth() + 1).toString(),
    d: ('0' + date.getDate()).toString().slice(-2),
    j: date.getDate().toString(),
    H: ('0' + date.getHours()).toString().slice(-2),
    G: date.getHours().toString(),
    i: ('0' + date.getMinutes()).toString().slice(-2),
    s: ('0' + date.getSeconds()).toString().slice(-2)
  }

  const modifiers = Object.keys(parts).join('')
  const reDate = new RegExp('(?<!\\\\)[' + modifiers + ']', 'g')
  const reEscape = new RegExp('\\\\([' + modifiers + '])', 'g')

  return format
    .replace(reDate, $0 => parts[$0])
    .replace(reEscape, ($0, $1) => $1)
}

// ----- EXAMPLES -----
console.log( formatDate() ); // "2019-05-21"
console.log( formatDate('H:i:s') ); // "16:21:32"
console.log( formatDate('Y-m-d, o\\n H:i:s') ); // "2019-05-21, on 16:21:32"
console.log( formatDate('Y-m-d', new Date(2000000000000)) ); // "2033-05-18"

答案 32 :(得分:0)

不需要库

纯JavaScript

下面的示例从今天起算过去两个月

var d = new Date()
d.setMonth(d.getMonth() - 2);
var dateString = new Date(d);
console.log('Before Format', dateString, 'After format', dateString.toISOString().slice(0,10))

答案 33 :(得分:0)

设置格式并从哈希图数据中查找最大,最小日期

var obj = {"a":'2001-15-01', "b": '2001-12-02' , "c": '2001-1-03'};

function findMaxMinDate(obj){
  let formatEncode = (id)=> { let s = id.split('-'); return `${s[0]+'-'+s[2]+'-'+s[1]}`}
  let formatDecode = (id)=> { let s = id.split('/'); return `${s[2]+'-'+s[0]+'-'+s[1]}`}
  let arr = Object.keys( obj ).map(( key )=> { return new Date(formatEncode(obj[key])); });
  let min = new Date(Math.min.apply( null, arr )).toLocaleDateString();
  let max = new Date(Math.max.apply( null, arr )).toLocaleDateString();
  return {maxd: `${formatDecode(max)}`, mind:`${formatDecode(min)}`}
}

console.log(findMaxMinDate(obj));

答案 34 :(得分:0)

new Date(new Date(YOUR_DATE.toISOString()).getTime() - 
                 (YOUR_DATE.getTimezoneOffset() * 60 * 1000)).toISOString().substr(0, 10)

答案 35 :(得分:0)

其中一些是好的 - 但不是很灵活。我想要能够真正处理更多边缘情况的东西,所以我采用了@orangleliu的答案并对其进行了扩展。 https://jsfiddle.net/8904cmLd/1/

function DateToString(inDate, formatString) {
// Written by m1m1k 2018-04-05

// Validate that we're working with a date
if(!isValidDate(inDate))
{
    inDate = new Date(inDate);
}
// see the jsFiddle for extra code to be able to use DateToString('Sun May 11,2014','USA');
//formatString = CountryCodeToDateFormat(formatString);

  var dateObject = {
    M: inDate.getMonth() + 1,
    d: inDate.getDate(),
    D: inDate.getDate(),
    h: inDate.getHours(),
    m: inDate.getMinutes(),
    s: inDate.getSeconds(),
    y: inDate.getFullYear(),
    Y: inDate.getFullYear()
  };
  // Build Regex Dynamically based on the list above.
  // Should end up with something like this "/([Yy]+|M+|[Dd]+|h+|m+|s+)/g"
  var dateMatchRegex = joinObj(dateObject, "+|") + "+";
  var regEx = new RegExp(dateMatchRegex,"g");
  formatString = formatString.replace(regEx, function(formatToken) {
    var datePartValue = dateObject[formatToken.slice(-1)];
    var tokenLength = formatToken.length;

    // A conflict exists between specifying 'd' for no zero pad -> expand to '10' and specifying yy for just two year digits '01' instead of '2001'.  One expands, the other contracts.
    // so Constrict Years but Expand All Else
    if(formatToken.indexOf('y') < 0 && formatToken.indexOf('Y') < 0)
    {
        // Expand single digit format token 'd' to multi digit value '10' when needed
        var tokenLength = Math.max(formatToken.length, datePartValue.toString().length);
    }
        var zeroPad = (datePartValue.toString().length < formatToken.length ? "0".repeat(tokenLength) : "");
    return (zeroPad + datePartValue).slice(-tokenLength);
  });

    return formatString;
}

使用示例:

DateToString('Sun May 11,2014', 'MM/DD/yy');
DateToString('Sun May 11,2014', 'yyyy.MM.dd');
DateToString(new Date('Sun Dec 11,2014'),'yy-M-d');

答案 36 :(得分:0)

我修改了Samit Satpute的回复如下:

var newstartDate = new Date();
// newstartDate.setDate(newstartDate.getDate() - 1);
var startDate = newstartDate.toISOString().replace(/[-T:\.Z]/g, ""); //.slice(0, 10); // To get the Yesterday's Date in YYYY MM DD Format
console.log(startDate);

答案 37 :(得分:0)

答案的另一个组合。很可读,但有点冗长。

function getCurrentDayTimestamp() {
  const d = new Date();

  return new Date(
    Date.UTC(
      d.getFullYear(),
      d.getMonth(),
      d.getDate(),
      d.getHours(),
      d.getMinutes(),
      d.getSeconds()
    )
  // `toIsoString` returns something like "2017-08-22T08:32:32.847Z"
  // and we want the first part ("2017-08-22")
  ).toISOString().slice(0, 10);
}

答案 38 :(得分:0)

如果所有时区的日期需要相同,例如表示来自数据库的某些值,那么请务必在js date对象上使用utc版本的day,month,fullyear函数,因为这将在utc时间显示并避免关闭某些时区内有1个错误。更好的是使用moment.js日期库进行这种格式化

答案 39 :(得分:-1)

所有给出的答案都很棒并帮助了我。在我的情况下,我想以yyyy mm dd格式和date-1获取当前日期。这对我有用。

var endDate = new Date().toISOString().slice(0, 10); // To get the Current Date in YYYY MM DD Format

var newstartDate = new Date();
newstartDate.setDate(newstartDate.getDate() - 1);
var startDate = newstartDate.toISOString().slice(0, 10); // To get the Yesterday's Date in YYYY MM DD Format
alert(startDate);

答案 40 :(得分:-1)

formatDate(date) {
  const d = new Date(date)
  const ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(d);
  const mo = new Intl.DateTimeFormat('en', { month: 'short' }).format(d);
  const da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(d);
  return `${da}-${mo}-${ye}`;
}

console.log("Formatated Date : ", formatDate("09/25/2020") )
// Output :: Formatated Date : 25-Sep-2020

答案 41 :(得分:-1)

解决这个问题的简单方法

3.49

请试试这个 enter image description here

console.log((new Date()).toDateString("YYYY-MM-DD"))

答案 42 :(得分:-3)

This worked for me, and you can paste this directly into your HTML if needed for testing:

<script type="text/javascript">
        if (datefield.type!="date"){ //if browser doesn't support input type="date", initialize date picker widget:
            jQuery(function($){ //on document.ready
                $('#Date').datepicker({
                    dateFormat: 'yy-mm-dd', // THIS IS THE IMPORTANT PART!!!
                    showOtherMonths: true,
                    selectOtherMonths: true,
                    changeMonth: true,
                    minDate: '2016-10-19',
                    maxDate: '2016-11-03'
                });
            })
        }
    </script>

答案 43 :(得分:-4)

我们经常遇到这样的问题。每个解决方案看起来都是如此。但是看着php,我们有一种处理不同格式的方法。 php's strtotime处有一个https://locutus.io/php/datetime/strtotime/函数端口。 我提供了一个小的开源npm软件包作为替代方法:

<script type="module">
import { datebob } from "@dipser/datebob.js";
console.log( datebob('Sun May 11, 2014').format('Y-m-d') ); 
</script>

请参见datebob.js

答案 44 :(得分:-6)

就像使用这样明确地为YYYY MM DD工作(如2017-03-12)

var todayDate = new Date()。slice(0,10);