如何将 ISO 日期转换为日期格式 yyyy-mm-dd?

IT技术 javascript date
2021-02-11 12:32:30

如何从ISO 8601日期获取格式为 yyyy-mm-dd 的日期?

我的 8601 日期是

2013-03-10T02:00:00Z

我怎样才能得到以下内容?

2013-03-10
6个回答

只需裁剪字符串:

var date = new Date("2013-03-10T02:00:00Z");
date.toISOString().substring(0, 10);

或者,如果您只需要字符串中的日期。

var strDate = "2013-03-10T02:00:00Z";
strDate.substring(0, 10);
@GuillaumeF。一个重要的考虑因素,但它确实符合 OP 的要求
2021-03-16 12:32:30
我认为这是他们所有人中最简单和最优雅的解决方案,但是这里有什么垮台吗?
2021-03-18 12:32:30
@Aida_Aida 我能想到的唯一问题是,如果您的代码处理未来至少 8000 年的地理尺度时间,您的代码可能会中断,因为格式将YYYYY-MM-DD在 10000 年。为避免这种情况,您可以拆分T字符代替。(参见en.wikipedia.org/wiki/Year_10,000_problem
2021-03-26 12:32:30
这种方式不会正确处理时区,因为 ISOString 是 UTC 但 Date 对象是本地的。你必须考虑到这一点。
2021-03-27 12:32:30
我无法理解为什么应该将字符串解析为日期。子串的选择似乎是最简单的答案。
2021-04-06 12:32:30

试试这个

date = new Date('2013-03-10T02:00:00Z');
date.getFullYear()+'-' + (date.getMonth()+1) + '-'+date.getDate();//prints expected format.

更新:-

正如评论中所指出的,如果需要,我正在更新答案以打印日期和月份的前导零。

date = new Date('2013-08-03T02:00:00Z');
year = date.getFullYear();
month = date.getMonth()+1;
dt = date.getDate();

if (dt < 10) {
  dt = '0' + dt;
}
if (month < 10) {
  month = '0' + month;
}

console.log(year+'-' + month + '-'+dt);

与 DriveByPoster 的答案相比,这更长且更容易打错字。但我不会投反对票,因为它与语言无关。它只是不使用我们可以使用的简单工具。
2021-03-16 12:32:30
同意@user3413723 这不能回答问题,因为它删除了前导 0 因此不符合 YYYY-MM-DD 格式的要求
2021-03-17 12:32:30
请注意,我认为这不会为日或月打印前导零
2021-03-28 12:32:30
工作正常@Mritunjay
2021-03-30 12:32:30
您可以简单地使用dt = dt.padStart(2, '0'));代替两个 IFmonth = month.padStart(2, '0'));
2021-04-03 12:32:30

您可以查看 Moment.jsLuxondate- fnsDay.js以获得不错的日期操作。

或者只是提取 ISO 字符串的第一部分,它已经包含您想要的内容。这是一个在 上拆分的示例T

"2013-03-10T02:00:00Z".split("T")[0] // "2013-03-10"

另一个例子是提取前 10 个字符:

"2013-03-10T02:00:00Z".substr(0, 10) // "2013-03-10"

这就是我为获取日期所做的工作:

let isoDate = "2013-03-10T02:00:00Z";

alert(isoDate.split("T")[0]);

据我所知,这是实际提出 split() 想法作为答案答案的第一个答案,尽管我在任何地方都可以使用 moment(),但我喜欢努力、可靠性与有效因素的解决方案。
2021-03-19 12:32:30
toISOString 使用 UTC,这将在本地时区从午夜偏移的时间段内生成错误的本地日期。– 罗格
2021-03-28 12:32:30

let isoDate = "2013-03-10T02:00:00Z";
var d = new Date(isoDate);
d.toLocaleDateString('en-GB'); // dd/mm/yyyy
d.toLocaleDateString('en-US'); // mm/dd/yyyy