【问题标题】:Parsing into UTC/GMT time with date-functions.js library使用 date-functions.js 库解析为 UTC/GMT 时间
【发布时间】:2018-03-14 11:11:10
【问题描述】:

使用 date-functions.js 库(例如在 datetimepicker jQuery 插件中使用)执行此操作:

Date.parseDate('2018-03-10 12:12', 'Y-m-d H:i')

给予:

Sat Mar 10 2018 12:12:00 GMT+0100 (Paris, Madrid)

如何获取 Unix 时间戳或 GMT / UTC 时间的结果?

【问题讨论】:

  • 请阅读Why is extending native objects a bad practice? 并避免使用链接中的代码。在 StackOverflow 上有许多替代方法可以做你想做的事,只需搜索即可。
  • @str 我正在使用众所周知的 github.com/xdan/datetimepicker jQuery 插件,它在内部使用 date-functions.js,它适用于我想要的 99.9%,所以我不想重新编码整个 jQuery 插件只是为了使用一个新的日期库。 (我花时间搜索其他 datetimepicker 插件,但这个效果最好)。
  • 如果 ECMAScript 原生添加 Date.parseDate,无论如何你都必须这样做。
  • 那么这个时候@str,我会写这个网站最好用1024x768分辨率的Internet Explorer 6浏览,它将解决新的ECMAScript添加问题。跨度>
  • 如果任何答案解决了您的问题,请接受。谢谢

标签: javascript date datetime time utc


【解决方案1】:

像 '2018-03-10 12:12' 这样的字符串通常会被解析为本地字符串,因为没有时区偏移。它也不符合 ISO 8601,因此使用内置解析器会在不同的浏览器中产生不同的结果。

虽然您可以使用库,但将其解析为 UTC 并获取时间值只需 2 行代码:

function toUTCTimeValue(s) {
  var b = s.split(/\D/);
  return Date.UTC(b[0],b[1]-1,b[2],b[3],b[4]);
}

// As time value
console.log(toUTCTimeValue('2018-03-10 12:12'));

// Convert to Date object and print as timestamp
console.log(new Date(toUTCTimeValue('2018-03-10 12:12')).toISOString());

【讨论】:

    【解决方案2】:

    var date = new Date('2018-03-10 12:12'.replace(' ', 'T'));
    
    // Unix
    console.log(Math.floor(date.getTime() / 1000));
        
    // UTC
    console.log(date.toUTCString());

    一如既往,请查看 MDN 上的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

    【讨论】:

    • '2018-03-10T12:12' 将被解析为本地,而不是 UTC。
    • @RobG 这是根据“假设给定时间是浏览器本地时区中的用户输入”的要求。
    【解决方案3】:

    请改用MomentJS。您可以准确指定要解析的字符串的格式。MomentJS 可以为您提供底层的Date 对象、unix 时间戳以及转换为 UTC。

    var d = moment('2018-03-10 12:12', 'YYYY-MM-DD HH:mm');
    console.log(d.toDate());
    console.log(d.unix());
    console.log(d.utc().toDate());
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.21.0/moment.min.js"></script>

    您当然也可以将日期解析为 UTC,而不是将其视为本地时间。

    moment.utc('2018-03-10 12:12', 'YYYY-MM-DD HH:mm');
    

    注意对我来说测试 UTC 有点困难,因为我在英国,而且 GMT 和 UTC实际上是一样的。 p>

    【讨论】:

    • 你们英国开发者很幸运不必处理时区问题:)
    • @Basj 大声笑,这对我们来说更像是一个问题,因为它经常被忽视,然后我们想知道为什么事情不起作用。我们仍然会担心夏令时。
    • 没错 :) ps:我不记得了:你有夏令时更改吗?
    • @Basj 是的。我们在 3 月底过渡到 BST(英国夏令时),然后在 10 月底返回。通常夏令时是最大的问题,因为它在不同的时间因不同的时区而变化(如果有的话)。
    • 这会将其解析为本地,因此每个时区的结果不同,偏移量不同。
    猜你喜欢
    • 1970-01-01
    • 2018-01-08
    • 2012-05-01
    • 1970-01-01
    • 2010-09-15
    • 2019-03-31
    • 1970-01-01
    相关资源
    最近更新 更多