【问题标题】:Convert UTC to standard date time format using javascript使用 javascript 将 UTC 转换为标准日期时间格式
【发布时间】:2014-06-24 20:37:38
【问题描述】:

如何使用 Javascript 将 UTC 时间转换为正确的日期 - 时间格式?

这就是我想做的事情

var d = new Date("2014-01-01");
var new_d = d.toUTC(); // 1388534400000
var old_d = function(new_d){
    // return "2014-01-01" // how can i get this? 
}

现在如何,我可以从 1388534400000 获得原始日期 - 2014-01-01?

****另外,请注意,当我这样做时 --- new Date(1388534400000);它使日期减少了 1 天。 也就是说,它没有给出 Jan 01 2014,而是给出了 Dec 31 2013。但是,我想要 2014 年 1 月 1 日。****

有没有与 toUTC() 方法相反的方法?

// _________ 对于那些 toUTC() 不起作用的人

"toUTC" 方法适用于我的 chrome 控制台 请参阅下面的屏幕截图

【问题讨论】:

  • @janaspage:我该如何解决这个问题?我不希望那段时间被数小时甚至数分钟缩短。我能做到吗?
  • 请告诉我们你使用的.toUTC()函数,因为它是那个函数!
  • sigh - 这是此类问题中的第 10 亿个问题。简单的答案是使用moment.js。更难的答案是连字符触发日期对象使用 UTC。例如,see herehere
  • @MattJohnson - 这不是这里的问题。
  • toUTC 是非标准的。您必须在加载的某些脚本中声明它,或者使用某些非标准版本的 chrome。

标签: javascript date utc


【解决方案1】:

当您将包含连字符的字符串传递给Date 构造函数时,它会将其视为UTC。如果你不打发时间,它会认为它是午夜。如果您所在的时区落后于 UTC(例如在美洲大部分地区),您将看到错误的本地时间转换。

这是我的 chrome 开发控制台的屏幕截图,所以你可以明白我的意思

如果我改为使用斜线:

考虑使用moment.js - 它将接受有助于避免此问题的格式参数。

【讨论】:

    【解决方案2】:

    尝试使用以下方法:

    new Date(new_d); 
    

    【讨论】:

    • 它返回这个 - 2013 年 12 月 31 日星期二 16:00:00 GMT-0800 (PST),我想要 2014-01-01。另外,我不知道为什么它返回这个日期 ---Dec 31 2013 ,而不是这个日期 --- Jan 1 2014
    【解决方案3】:

    问题在于您实例化日期的方式。 Javascript 将连字符解释为 utc 日期,将斜杠解释为本地日期。

    给出标记为解释的结果。

    var utcDate = new Date('2014-01-01') // returns a UTC date
    var localDate = new Date('2014/01/01'); // Returns local date
    

    但是要将日期转换回您的起始点字符串,您可以执行以下操作。

    function toDateString(utcMillis){
        var date = new Date(utcMillis);
        d = date.getDate();
        m = date.getMonth() +1;
        y = date.getFullYear();
        return y + '-' + addLeadingZero(m, 2) + '-' + addLeadingZero(d,2);
    }
    
    function addLeadingZero(n, length){
       n = n+'';
       if(n.length<length)
          return addLeadingZero('0'+n, length--);
       else
          return n;
    }
    

    如果您发现自己有 UTC 日期,您仍然可以这样做:

    function toUTCDateString(utcMillis){
        var date = new Date(utcMillis);
        d = date.getUTCDate();
        m = date.getUTCMonth() +1;
        y = date.getUTCFullYear();
        return y + '-' + addLeadingZero(m, 2) + '-' + addLeadingZero(d,2);
    }
    

    To play around with it, and see it for yourself, see this Fiddle:

    【讨论】:

    • 这很棒。但是,我不知道为什么它会少返回 1 天,因为 new Date("2014-01-01").toUTC() 给出 1388534400000。所以 toUTCDate(1388534400000) 应该返回 2014-01-01。相反,它少了一天。不知道为什么会这样?
    • 标准中不存在您的函数.toUTC()。所以我不能告诉你为什么你的结果不同。制作一个小提琴表演来解决您的问题。
    • 但是,new Date("2012-01-01") 给出了 2011 年 12 月 31 日星期六 16:00:00 GMT-0800 (PST)。所以,我猜这不是 toUTC 方法,而是 Date 本身添加了一些区域偏移
    • 不,是你的toUTC() 破坏了它。
    • 不,不是。我测试过
    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    相关资源
    最近更新 更多