【问题标题】:moments JS - correct way to compare local time时刻 JS - 比较当地时间的正确方法
【发布时间】:2017-09-26 07:14:16
【问题描述】:

我正在尝试使用moment.js 将存储在数据库中的日期(设置为Europe/London 时区)与当前用户时间进行比较,同时考虑到他们的时区。

我得到一个从数据库返回的日期字符串,想使用fromNow()函数,如下:

console.log(dbDate);
console.log(moment().format());
console.log(moment(dbDate).fromNow());

// DB stored time (Europe/London)
// 2017-09-26 06:56:26

// Current user time (timezone is Pacific Time / Los Angeles)
// 2017-09-25T23:59:03-07:00

// String output by fromNow() function, which should reflect the timezone difference but doesn't
// in 7 hours

我希望fromNow() 字符串考虑时区差异,这应该始终是时间"ago",而不是将来。

我可能在库中遗漏了一些非常明显的东西,所以如果这很简单,请提前道歉。

【问题讨论】:

    标签: javascript jquery momentjs


    【解决方案1】:
    // get the current time so we know which offset to take
    var now = moment.utc();
    // get the zone offsets for this time, in minutes
    var NewYork_tz_offset = moment.tz.zone("America/New_York").offset(now); 
    var MY_DATE = moment(dbDate);
    // calculate the difference in hours
    console.log((NewYork_tz_offset - MY_DATE) / 60);
    

    这对您的事业有帮助吗?

    【讨论】:

    • 谢谢。我不知道用户时区,所以我需要检测它,但是应用以下代码无法按预期工作var NewYork_tz_offset = moment.tz.zone(moment.tz.guess()).offset(now); - 有什么想法吗?
    • 我相信是 UTC(使用 Magento)
    • 您需要将它们都转换为一种格式,然后减去差异。您将在几秒钟内获得价值。您可以以小时为单位或任何您喜欢的格式进行转换。
    【解决方案2】:

    你必须使用moment timezone,你可以使用moment.tz解析dbDate指定"Europe/London"时区:

    moment.tz 构造函数采用与时刻构造函数相同的所有参数,但使用最后一个参数作为时区标识符。

    然后你可以使用矩difffromNow

    这里是一个活生生的例子:

    var dbDate = "2017-09-26 06:56:26";
    var now = moment();
    var momDbDate = moment.tz(dbDate, "Europe/London");
    var pacificTime = moment("2017-09-25T23:59:03-07:00");
    console.log(dbDate);
    console.log(moment().format());
    console.log(momDbDate.fromNow());
    console.log(momDbDate.diff(now, 'hours'));
    console.log(momDbDate.diff(pacificTime, 'hours'));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.13/moment-timezone-with-data-2012-2022.min.js"></script>

    【讨论】:

      猜你喜欢
      • 2020-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      相关资源
      最近更新 更多