【问题标题】:Compare dates in array with different timezones in javascript将数组中的日期与javascript中的不同时区进行比较
【发布时间】:2016-12-08 08:59:06
【问题描述】:

大家好,大家都认为我在数组中存储了 4 个日期,其中 2 个来自不同的时区,现在如果我想在 javascript 中找出 maxdate 和 mindate,那么任何人都可以告诉我该怎么做吗?

谢谢。

【问题讨论】:

  • 请工作代码,理论不是首选
  • 将日期转换为 UTC 并进行比较
  • @VinodLouis - 日期 UTC。
  • @RobG new Date() 和 .to UTCString() 之间存在差异,请参阅 jsfiddle.net/uxLrn9Lo 本地时间和 UTC
  • 欢迎来到 StackOverflow!不幸的是,实际上没有人能为您的问题提供一个好的答案,因为您没有提供足够的信息。甚至 Oriel 的尝试也对您的输入值的实际情况做出了很多假设。您需要提供显示特定输入值示例的代码。请阅读帮助中心的How do I ask a good question?How to create a Minimal, Complete, and Verifiable example

标签: javascript date timezone


【解决方案1】:

为了比较不同时区的日期,您需要将每个日期转换为同一时区(例如您当地的时区),所有日期都将在同一时区,您将能够比较它们。

为此,您有一个“日期构造函数”( new Date() ),它获取一个日期并将其转换为您的本地时区,在您拥有这个之后,您需要做的就是执行您的逻辑。

这是一个例子:

var date1 = new Date("Wed Mar 25 2015 09:56:24 GMT+0900 (Tokyo Time)"); //new Date will take your time string in tokyo and convert it into your local time zone date and so on...
var date2 = new Date("Wed Mar 25 2015 09:56:24 GMT+0100 (W. Europe Standard Time)");
var date3 = new Date(Date.now());
var date4 = new Date(Date.now());

var array = [date1 , date2 ,date3 ,date4 ];

var maxDate = new Date(date1);
var minDate = new Date(date1);

for (var i =1 ; i<array.length ; i++){
     if (new Date(array[i]) > maxDate )
        maxDate = new Date(array[i]);

     if (new Date(array[i]) < minDate )
        minDate = new Date(array[i]);
}

alert(minDate.toString() + " " + maxDate.toString());

//Tokyo time is the earliest because is +09:00

//use minDate and maxDate here as you want.

【讨论】:

  • new Date(date1.toUTCString()) 的意义何在?如果是复制日期,那么new Date(date1)就足够了。仅代码的答案没有帮助,您应该解释 OP 的问题以及如何解决它。
  • new Date(date1) 不好,因为他想比较不同时区的日期,所以 toUTCString() 正在进行转换,但它返回字符串,我想使用日期进行比较.
  • 不,它根本没有进行任何转换。 Date 对象仅跟踪特定的时间点,即自 Unix 纪元以来的毫秒数 - 这在 UTC 中是明确的。 Date 对象与本地时间一起工作的唯一时间是当您隐式或显式调用 toString 时,或者如果您使用本地时间特定函数(如 getHours 等)。在您的代码中,您只使用本地时间最后,当您在警报中隐式转换为字符串时。代码中的其他所有内容都使用 UTC。
  • 请记住,toUTCString 在输出中包含"GMT",当Date 构造函数对其进行解析时,会将时间视为UTC/GMT。这里没有转换。这不应被标记为已接受的答案。
  • 另一种思考方式 - 您创建的数组由四个 Date 对象组成。由于 Date 对象只能跟踪通用时间中的特定时刻,因此您自动不会遇到与 OP 询问的情况相同的情况。 Date 对象不知道时区,除非在显示它们时 - 然后,仅在 本地 时区。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多