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

use*_*547 293 javascript formatting date date-format time-format

大家好我有一个日期格式太阳5月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);
Run Code Online (Sandbox Code Playgroud)

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

use*_*953 412

你可以做

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('-');
}
Run Code Online (Sandbox Code Playgroud)

用法示例:

alert(formatDate('Sun May 11,2014'));
Run Code Online (Sandbox Code Playgroud)

输出:

2014-05-11
Run Code Online (Sandbox Code Playgroud)

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

  • 这就像一个魅力,但我不明白为什么 javascript 没有为此提供本机解决方案...我的意思是,我们已经到了 2020 年,日期是网络应用程序的一个重要方面。 (16认同)
  • @ Fuser97381同一语句中的多个变量声明不仅仅是美学风格偏好.这是一种危险的做法.如果您无意中失败,请在每个声明后添加一个逗号,最后创建全局变量.对于可能成为问题的规范答案的东西,不应鼓励这样做. (6认同)
  • `'使用严格';`@bhspencer (6认同)
  • 在同一个语句中真的有多个变量声明吗?http://stackoverflow.com/questions/694102/declaring-multiple-variables-in-javascript (5认同)
  • 重新格式化日期字符串不应依赖于内置解析器对非标准字符串的成功解析。鉴于 OP 格式,它可以在不使用 Date 的情况下以更少的代码重新格式化。 (4认同)

Dar*_*ous 351

只需利用内置toISOString方法将日期转换为ISO 8601格式.

yourDate.toISOString().split('T')[0]
Run Code Online (Sandbox Code Playgroud)

其中yourDate是您的日期对象.

  • 使用此方法时要小心,因为它首先将日期转换为UTC.如果你在一个+时区并且你的时间部分在一天的早些时候,那么它可以回滚一天.或者,如果你在一个时区并且你的时间部分在当天晚些时候,那么它可能会向前滚动一天. (182认同)
  • `const offset = yourDate.getTimezoneOffset(); yourDate = new Date(yourDate.getTime()+(offset*60*1000)); yourDate.toISOString().split('T')[0]`这应解决时区问题 (13认同)
  • `now.toISOString().substring(0,10);` 这是一个更简洁的选择,因为它提醒你`YYYY-MM-DD`是完整iso格式的前十个字符 (11认同)
  • 注意:使用 @mjwrazor 评论的有用解决方案,我必须减去而不是添加偏移量才能获得正确的日期(将 `+ (offset` 更改为 `- (offset`) (7认同)
  • 这不适用于Internet Explorer <= 8 (3认同)
  • exbuddha,并没有解决@LukeBaulch的问题 (3认同)
  • 试试这个:`new Date(yourDateStr).toISOString().split('T')[0]` (2认同)
  • 为什么会有123票呢?我的时区是+05:00和var yourDate = new Date(2018,3-1,26); yourDate.toISOString()。split('T')[0];`给我`“ 2018-03-25”`。 (2认同)
  • @rococo,您可以根据 UTC 0 的方向添加或减去。这是英格兰。 (2认同)
  • @rococo不,timezoneoffset已经有一个符号,所以你_always_减去 (2认同)

Jua*_*dez 164

2020 答案

您可以使用本机.toLocaleDateString()函数,该函数支持多个有用的参数,例如语言环境(选择 MM/DD/YYYY 或 YYYY/MM/DD等格式)、时区(转换日期)和格式详细信息选项(例如: 1 对 01 对 1 月)。

例子

const testCases = [
  new Date().toLocaleDateString(), // 8/19/2020
  new Date().toLocaleString(undefined, {year: 'numeric', month: '2-digit', day: '2-digit', weekday:"long", hour: '2-digit', hour12: false, minute:'2-digit', second:'2-digit'}),
  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)
]

for (const testData of testCases) {
  console.log(testData)
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • `.toLocaleDateString('en-CA')` 的确切格式不可移植,并且**会在较新的浏览器中中断**!最近,在 ICU 72(Chrome 110 和 Firefox 110 beta)的浏览器中,它从“yyyy-MM-dd”更改为“M/d/yyyy”。不要对区域设置的特定格式做出假设。使用基于“.toISOString()”的答案之一。 (17认同)
  • @SamBarnum 那……是在这里学习的错误教训。不能保证“sv-SE”将来也不会改变。如果您要解析结果,请使用“.toISOString()”。 (3认同)
  • 对于我不需要时区的情况, `new Date().toLocaleDateString('en-CA')` 是完美的 (2认同)
  • 他们更改了“en-CA”格式,因此请小心 https://github.com/nodejs/node/issues/45945 其他格式一般应该很好,这种变化并不常见。 (2认同)
  • 这个答案并没有直接解决问题。这里的要点本质上是“使用非默认区域设置试试运气”……即使如此,在给出的许多(不相关)示例中也没有明确的解决方案 (2认同)

Fer*_*lar 102

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

var todayDate = new Date().toISOString().slice(0,10);
Run Code Online (Sandbox Code Playgroud)

  • 你如何处理@Luke_Baulch提到的日期转换? (12认同)
  • 并不总是有效。由于 UTC 转换,它有时会减去一天。 (9认同)
  • 你可以这样做:var todayDate = new Date(); todayDate.setMinutes(todayDate.getMinutes() - todayDate.getTimezoneOffset()); .todayDate.toISOString()片(0,10); 这应该有助于避免UTC问题. (4认同)
  • @FernandoAguilar 不过有一个疑问,我们怎么知道我们需要减去偏移量还是添加它? (3认同)
  • 世界标准时间!!!!在澳大利亚,我们是+10时区。因为我倾向于在下午解决问题,所以我花了一周的时间才找到这个。 (2认同)

Joh*_*ers 86

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

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

这个怎么运作 :

  • new Date("Sun May 11,2014")将字符串"Sun May 11,2014"转换为日期对象,该日期对象表示Sun May 11 2014 00:00:00基于当前区域设置的时区中的时间(主机系统设置)
  • new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))Sun May 11 2014 00:00:00通过减去时区偏移量,将您的日期转换为与UTC时间(标准时间)对应的日期对象
  • .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);
Run Code Online (Sandbox Code Playgroud)

  • 没有人吓到这是最简单的方法吗? (10认同)
  • 我在 SO 和其他网站上进行了大量搜索,以找到处理 JS 中日期的时区问题的最佳方法,毫无疑问,这是迄今为止最简单也是最好的。谢谢你! (3认同)
  • @JoeDevmon:我不明白这与这里有什么关系。`- (date.getTimezoneOffset() * 60000 )` 位应该消除任何时区差异,包括夏令时的影响。 (2认同)
  • @JohnSlegers 这就是我的想法,但在某些情况下我仍然会遇到前一天的情况。我重构了,你的例子现在可以运行了。我一定有一个奇怪的日期字符串之类的。感谢您坚持并指出这一点。+1 (2认同)
  • 很遗憾,但这是将 js 日期格式化为您需要的字符串的最简单方法。我是 js 新手,但在 java 中,将日期格式化为任何格式要容易 100 倍。这就是为什么我认为有更简单的方法,但在我尝试了不同的解决方案后,我选择了这个。谢谢您的回答。 (2认同)

小智 30

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)
    });
}
Run Code Online (Sandbox Code Playgroud)

结果:

format(new Date('Sun May 11,2014'), 'yyyy-MM-dd')
"2014-05-11
Run Code Online (Sandbox Code Playgroud)

  • 你可以轻松地避免`eval`。 (8认同)
  • 这是一个避免 eval 和评论更好的版本 https://jsfiddle.net/8904cmLd/2/ (4认同)
  • 我喜欢这个解决方案相对于这个问题的其他答案所提供的额外灵活性。我还没有彻底测试过这一点,但对于我想要的格式(即“yyyy-MM-dd hh:mm:ss”),它的工作原理与预期一致。 (3认同)
  • 我从这个回应中受益。我确实用 eval 语句将该行替换为 `return ((v.length &gt; 1 ? "0" : "") + z[v.slice(-1)]).slice(-2);` (3认同)

Hen*_*Jan 27

2021 年的解决方案使用Intl.

Intl现在所有浏览器都支持新对象。
您可以通过选择使用所需格式的“区域设置”来选择格式。

瑞典语言环境使用格式“yyyy-mm-dd”:

// Create a date
const date = new Date(2021, 10, 28);

// Create a formatter using the "sv-SE" locale
const dateFormatter = Intl.DateTimeFormat('sv-SE');

// Use the formatter to format the date
console.log(dateFormatter.format(date)); // "2021-11-28"
Run Code Online (Sandbox Code Playgroud)

使用 Intl 的缺点:

  • 您无法使用此方法“取消格式化”或“解析”字符串
  • 您必须搜索所需的格式(例如在维基百科上)并且不能使用像“yyyy-mm-dd”这样的格式字符串


Ale*_*gin 26

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

console.log(new Date('Sun May 11,2014').toLocaleDateString('fr-CA'));
Run Code Online (Sandbox Code Playgroud)

我还发现这些语言环境从这个语言环境列表中给出了正确的结果所有语言环境及其短代码的列表?

'en-CA'
'fr-CA'
'lt-LT'
'sv-FI'
'sv-SE'
Run Code Online (Sandbox Code Playgroud)

'en-CA'
'fr-CA'
'lt-LT'
'sv-FI'
'sv-SE'
Run Code Online (Sandbox Code Playgroud)

  • @jymbob 我认为这些语言环境确实使用了这些格式。通过查看此维基百科页面,我得到了相同的答案:https://en.wikipedia.org/wiki/Date_format_by_country (2认同)

Luc*_* C. 21

在大多数情况下(没有时区处理)这就足够了:

date.toISOString().substring(0,10)
Run Code Online (Sandbox Code Playgroud)

例子

var date = new Date();
console.log(date.toISOString()); // 2022-07-04T07:14:08.925Z
console.log(date.toISOString().substring(0,10)); // 2022-07-04
Run Code Online (Sandbox Code Playgroud)


aqw*_*sez 20

一些答案的组合:

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

  • 这是第一个不会让我的大脑受伤的。 (11认同)
  • 我最喜欢这个解决方案 - 易于阅读,并且不依赖于 `toISOString()` 和使用该函数的潜在时区陷阱。 (3认同)
  • @mikeypie 不是真的。您只是简单地得到了日期解析错误,因为 `new Date('2022-05-18')` 将被解析为 UTC 日期 `2022-05-18T00:00:00.000Z`,而这仅对应于本地时间如果您位于 UTC 以西,则为“2022-05-17”。 (2认同)

Kam*_*ski 17

最短的

.toJSON().slice(0,10);
Run Code Online (Sandbox Code Playgroud)

  • 当客户端早于 UTC 并且 UTC 时间中的日期比当前客户端日期晚一天时,此功能不起作用。 (4认同)

Luo*_*Hui 13

检索年、月和日,然后将它们放在一起。直接、简单、准确。

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;
}

//Usage example:
alert(formatDate(new Date()));
Run Code Online (Sandbox Code Playgroud)


Nif*_*Ojo 10

如果您不反对使用任何库,则可以使用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');
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

  • 很酷的解决方案,但它是一个 300kb 的包 (4认同)
  • 只是关于 `moment.js` 库的更新 - `moment.js` 已经停止使用。 (2认同)

Par*_*ain 9

只需使用以下命令:

var date = new Date('1970-01-01'); // Or your date here
console.log((date.getMonth() + 1) + '/' + date.getDate() + '/' +  date.getFullYear());
Run Code Online (Sandbox Code Playgroud)

简单而甜美;)

  • 2字母格式没有填充。如果日期或月份小于10,它将显示一位数字,这就是为什么不能直接使用它的原因。 (4认同)
  • 是的,但请检查他想要的问题标题“ yyyy-mm-dd” :) (4认同)

小智 9

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]);
};
Run Code Online (Sandbox Code Playgroud)

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


小智 8

不幸的是,JavaScript 的Date对象很多缺陷。任何基于Date\ 内置的toISOString解决方案都必须扰乱时区,正如该问题的其他一些答案中所讨论的那样。Temporal.PlainDate提案中Temporal给出了表示 ISO-8601 日期(不带时间)的干净解决方案。自 2021 年 2 月起,您必须选择最适合您的解决方法。

\n

Date与普通字符串连接一起使用

\n

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

\n
function vanillaToDateOnlyIso8601() {\n  // month May has zero-based index 4\n  const date = new Date(2014, 4, 11);\n\n  const yyyy = date.getFullYear();\n  const mm = String(date.getMonth() + 1).padStart(2, "0"); // month is zero-based\n  const dd = String(date.getDate()).padStart(2, "0");\n\n  if (yyyy < 1583) {\n    // TODO: decide how to support dates before 1583\n    throw new Error(`dates before year 1583 are not supported`);\n  }\n\n  const formatted = `${yyyy}-${mm}-${dd}`;\n  console.log("vanilla", formatted);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Date与辅助库一起使用(例如formatISO来自date-fns

\n

这是一种流行的方法,但您仍然被迫将日历日期处理为Date,它代表

\n
\n

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

\n
\n

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

\n
import { formatISO } from "date-fns";\n\nfunction dateFnsToDateOnlyIso8601() {\n  // month May has zero-based index 4\n  const date = new Date(2014, 4, 11);\n  const formatted = formatISO(date, { representation: "date" });\n  console.log("date-fns", formatted);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

我希望有一个干净且经过实战检验的库,可以带来自己精心设计的 date\xe2\x80\x93time 表示形式。此问题中的任务的一个有希望的候选者来自LocalDate@js-joda/core但该库的活跃度不如 ,例如date-fns。在使用一些示例代码时,我在添加可选的@js-joda/timezone.

\n

然而,核心功能有效并且对我来说看起来非常干净:

\n
import { LocalDate, Month } from "@js-joda/core";\n\nfunction jodaDateOnlyIso8601() {\n  const someDay = LocalDate.of(2014, Month.MAY, 11);\n  const formatted = someDay.toString();\n  console.log("joda", formatted);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

使用Temporal-proposal polyfill进行实验

\n

不建议在生产环境中这样做,但如果您愿意,可以导入 future:

\n
import { Temporal } from "proposal-temporal";\n\nfunction temporalDateOnlyIso8601() {\n  // yep, month is one-based here (as of Feb 2021)\n  const plainDate = new Temporal.PlainDate(2014, 5, 11);\n  const formatted = plainDate.toString();\n  console.log("proposal-temporal", formatted);\n}\n
Run Code Online (Sandbox Code Playgroud)\n


Mak*_*ruf 8

只需检索年、月、日,然后将它们放在一起即可。

    function dateFormat(date) {
        const day = date.getDate();
        const month = date.getMonth() + 1;
        const year = date.getFullYear();

        return `${year}-${month}-${day}`;
    }

    console.log(dateFormat(new Date()));
Run Code Online (Sandbox Code Playgroud)


小智 6

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

npm i timesolver
Run Code Online (Sandbox Code Playgroud)

在您的代码中使用它:

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

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

getString
Run Code Online (Sandbox Code Playgroud)


krs*_*oni 6

还要考虑时区,这个单行应该没有任何库:

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


Has*_*own 6

当 ES2018 出现时(在 chrome 中工作),您可以简单地对其进行正则表达式

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

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
Run Code Online (Sandbox Code Playgroud)

这导致提取以下内容

{
    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"
}
Run Code Online (Sandbox Code Playgroud)

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

14/7/'20 @ 8:45
Run Code Online (Sandbox Code Playgroud)

  • 是的,但不可读,或易于扩展。您将其称为“膨胀”,字面意思是“代码……被认为不必要地冗长、缓慢或浪费资源”。SO 主要是*为了知识*,所以是的,即使字面上的问题已经得到解答,有时其他人(至少已经字面上的“3▲”)发现其他角度可能有用!想象一下。“我不玩‘西方最快的枪’游戏,所以当你看到我迟到的答案时,那是因为我有一些有价值的东西可以提供,我希望你能认可我的用心。” -一些伪君子 (3认同)
  • 看,伙计,除非你试图从字面上重新解析日期[在几秒钟内数十万次](https://measurethat.net/Benchmarks/Show/9652/0/i-suppose-you-think-我们应该在汇编中编写)你不会看到*任何区别*,所以我不知道你从哪里开始称它为膨胀。就像添加到一个旧的、已经回答的问题中的任何其他“新颖”答案一样;这为读者提供了选择,也许还有知识(“哎呀,我不知道正则表达式可以做到这一点!”)。读者应该知道答案是否适合他们的用例,而你侮辱了他们。 (2认同)

Ado*_*Ren 6

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

您可以使用padstart。

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

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

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


var*_*d11 6

这就是我所做的。

另一种替代的简短方法:-

const date = new Date().toISOString();
console.log(date.substring(0, date.indexOf('T')));
Run Code Online (Sandbox Code Playgroud)

substring()与 一起使用indexOf("T"),而不是在字符“T”处将其拆分为数组并访问第 0 个索引处的元素。


Ger*_*osi 5

这是一种方法:

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));
Run Code Online (Sandbox Code Playgroud)


Mic*_*dry 5

我建议使用类似formatDate-js 的东西,而不是每次都尝试复制它。只需使用支持所有主要 strftime 操作的库即可。

new Date().format("%Y-%m-%d")
Run Code Online (Sandbox Code Playgroud)


Wil*_*pes 5

new Date().toLocaleDateString('pt-br').split( '/' ).reverse( ).join( '-' );
Run Code Online (Sandbox Code Playgroud)

或者

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]
Run Code Online (Sandbox Code Playgroud)

尝试这个!

  • 第二个选项可能会显示错误的日期,因为它将显示 UTC 时区的数据。 (2认同)
  • 注意:“en-CA”区域设置字符串不再生成 yyyy-mm-dd (2认同)

Hyu*_*bin 5

警告此代码在某些版本的 Chrome、Node.js 等中不起作用。

\n
    \n
  • 预期的:yyyy-MM-dd
  • \n
  • 实际的:M/d/yyyy
  • \n
\n

参考

\n\n
\n

转换Date为日期字符串时请考虑时区。

\n

可以使用两种方法。

\n
    \n
  • .toISOString();- 固定为 GMT+0。包括时间,稍后应将其删除。
  • \n
  • .toLocaleDateString(\'en-CA\');- 可以指定时区。默认为系统。
  • \n
\n

请注意,这en-CA是一个区域设置,而不是一个时区。加拿大使用该YYYY-MM-DD格式。

\n

在以下示例中,系统时区设置为 PDT (GMT-7)

\n
const date = new Date(\'2023-04-08 GMT+09:00\');\n// Sat Apr 08 2023 00:00:00 GMT+0900 (\xed\x95\x9c\xea\xb5\xad \xed\x91\x9c\xec\xa4\x80\xec\x8b\x9c)\n// Fri Apr 07 2023 08:00:00 GMT-0700 (Pacific Daylight Time)\n\n// Based on GMT+0 or UTC - time is substringed.\ndate.toISOString(); // \'2023-04-07T15:00:00.000Z\'\ndate.toISOString().substring(0, 10); // \'2023-04-07\'\n\n// Based on GMT-7 - local timezone of the system\ndate.toLocaleDateString(\'en-CA\'); // \'2023-04-07\'\n\n// Based on GMT+9 - Asia/Seoul is GMT+9\ndate.toLocaleDateString(\'en-CA\', { timeZone: \'Asia/Seoul\' }); // \'2023-04-08\'\n
Run Code Online (Sandbox Code Playgroud)\n