【问题标题】:How to parse a date string to dd/mm/yyyy?如何将日期字符串解析为 dd/mm/yyyy?
【发布时间】:2014-02-26 15:43:50
【问题描述】:

我有这个字符串:

3913-12-10T20:00:00+0000

如何将其更改为 dd/mm/yyyy 格式?我的主要问题是我不认识这种模式。实际上是 2013 年 11 月 11 日,但我不知道如何提取它。

【问题讨论】:

  • 在我看来不像 2013 年 11 月 11 日。
  • 我刚刚发现它是一个 ISO-8601 日期格式字符串。
  • 这可能会为 3913 交易提供一些见解,stackoverflow.com/questions/14803901/…
  • @Euphe:T 是一个分隔符。 20:00:00+0000 是时间(带有时区偏移),3913-12-10 是日期。 JavaScript 可以解析这个 (new Date(dateStr)),但是你需要在之后正确地偏移日期。
  • 我认为有人调换了日期和月份;在某些内部表示中,月通常从 0 开始,而天从 1 开始。另外,服务器是 Perl 吗?我相信 Perl 日期从 1900 年开始。服务器可能是 2000 年之前的服务器,它只需要最后两位数。

标签: javascript


【解决方案1】:

这样做:

var d= new Date("3913-12-10T20:00:00+0000");
var newDate =  d.getDate() + '/' + d.getMonth() + '/' + d.getFullYear();

或您知道的任何其他日期格式函数。

【讨论】:

  • 当 OP 声称应该是 2013 年时,除了 d.getFullYear 将返回 3913。
  • 当输入是 3913 你会得到 3913.... 这是正常的 Json dateTime 格式。
  • 没有“Json dateTime 格式”之类的东西。此外,如果您阅读了这个问题,OP 想要将其“转换”为 2013 年 11 月 11 日,因为他声称应该是这样。
【解决方案2】:

您从中获取此数据的服务器正在向您提供错误数据。您应该向他们报告此问题,以便他们进行修复。他们可能正在使用已弃用的 API 和/或手动构建此字符串(不正确)。

字符串有效的ISO-8601,除了年份偏移+1900,月份偏移+1,日期偏移-1。

因此,一种解决方案是按原样解析它,然后偏移日期对象。我个人喜欢 moment.js 库,用于处理 JavaScript 中的日期。

var dateString = '3913-12-10T20:00:00+0000',
    dateObj = moment(dateString);

dateObj.subtract({'y': 1900, 'M': 1}).add('d', 1);

console.log(dateObj.format('MM/DD/YYYY')); // 11/11/2013

或者,如果您更喜欢使用原生 Date 对象:

var dateString = '3913-12-10T20:00:00+0000',
    dateObj = new Date(dateString);

dateObj.setFullYear(dateObj.getFullYear() - 1900);
dateObj.setMonth(dateObj.getMonth() - 1);
dateObj.setDate(dateObj.getDate() + 1);

console.log(dateObj.toDateString()); // Mon Nov 11 2013

【讨论】:

    【解决方案3】:
        function dateString(d, i) {
    
            var m_names = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
    
            var curr_date = d.getDate() + i;
            var sup = "";
    
            if (curr_date == 1 || curr_date == 21 || curr_date ==31){
               sup = "st";
            }
            else if (curr_date == 2 || curr_date == 22){
               sup = "nd";
            }
            else if (curr_date == 3 || curr_date == 23){
               sup = "rd";
            }
            else{
               sup = "th";
            }
    
            var curr_month = d.getMonth();
            var curr_year = d.getFullYear();
    
            var dateString = curr_date + sup + " " + m_names[curr_month] + " " + curr_year;
    
            return dateString;
    
        }
    

    【讨论】:

    • 我不知道字符串上有任何getDate() 函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 2018-05-19
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多