在javascript中将ISO日期转换为日期格式yyyy-mm-dd格式

 M7y4C8r2a6z4y 发布于 2022-12-29 18:31

如何从iso日期获得格式为yyyy-mm-dd的日期?

我的ISO日期是

2013-03-10T02:00:00Z

我怎样才能得到:

2013-03-10

小智.. 110

只需裁剪字符串:

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

@Aida_Aida我能想到的唯一问题是,如果您的代码在未来至少8000年处理地理规模的时间,您的代码可能会破坏,因为格式在10000年将是"YYYYY-MM-DD".避免这种情况你可以拆分`T`字符.(参见https://en.wikipedia.org/wiki/Year_10,000_problem) (19认同)

由于ISOString为UTC但Date对象为本地,因此这种方式将无法正确处理时区。您必须考虑到这一点。 (6认同)


Mritunjay.. 77

试试这个

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

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

    2022-12-29 18:33 回答
  • date-fns是一个非常大的库,用于一个用例.建议formatting options改用.它提供了基本上最大的功能,'2013-03-10T02:00:00Z'.substring(0, 10);具有更小的捆绑尺寸和许多date-fns.

    import format from 'date-fns/format'
    format('2013-03-10T02:00:00Z', 'YYYY-MM-DD'); // 2013-03-10, YYYY-MM-dd for 2.x
    

    需要注意的一点是,由于其ISO时间格式浏览器通常会从UTC时间转换为本地时区.虽然这是一个简单的用例,你可以做date-fns.

    对于更复杂的转换,还有formatting options很长的路要走.

    2022-12-29 18:33 回答
  • Moment将为您处理日期格式.以下是如何通过javascript标记包含它,然后是如何使用时刻格式化日期的示例.

    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>
    
    moment("2013-03-10T02:00:00Z").format("YYYY-MM-DD") // "2013-03-10"
    

    2022-12-29 18:33 回答
  • 您可以查看Moment.js,Luxon,date- fns或Day.js以获取日期操作.

    或者只是提取ISO字符串的第一部分,它已包含您想要的内容.下面是一个例子分裂的T:

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

    2022-12-29 18:34 回答
  • 试试这个

    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);
    2022-12-29 18:34 回答
  • 这是我只获取日期的方法:

    let isoDate = "2013-03-10T02:00:00Z";
    
    alert(isoDate.split("T")[0]);
    2022-12-29 18:36 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有