在iOS设备上比较日期的问题[重复]

Posted

技术标签:

【中文标题】在iOS设备上比较日期的问题[重复]【英文标题】:issue comparing dates on iOS devices [duplicate] 【发布时间】:2020-08-19 15:07:36 【问题描述】:

我正在尝试比较两个日期,它们在除 iPhone 之外的所有设备上都能正常工作。它在 iPhone 上发出错误警报。

jsfiddle

function play_time() 
    var crntTime;
    var today = new Date();
    var formattedTime = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
    var dd = today.getDate();
    var mm = today.getMonth() + 1;
    var yyyy = today.getFullYear();
    if (dd < 10) 
        dd = '0' + dd;
    
    if (mm < 10) 
        mm = '0' + mm;
    
    today = yyyy + '-' + mm + '-' + dd;
    var crntDatetime = `$today $formattedTime`;
    crntTime = new Date(crntDatetime).getTime();

    var check = '2020-08-18 23:14:07';

    var gameTime = new Date(check).getTime();

    if (crntTime <= gameTime) 
        alert('Play');
     else 
        alert('Later');
    
&lt;button onClick="play_time();"&gt; show Time &lt;/button&gt;

【问题讨论】:

Date 构造函数因平台而异。您传递的是 ios 代码无法识别的格式。 @Pointy 我应该使用哪种格式? 见克劳德先生的回答。 ISO标准以外的任何东西都是有风险的。另一种选择是使用像 Moment 这样的库,它允许您明确地告诉它您的日期格式的含义。 您的格式化时间也没有实际格式化。在我看来,你也需要填充它。最好使用正确的日期:const now = new Date().getTime(); const check = new Date(yyyy,mm-1,dd,hh,min,ss,0).getTime(); if (now &lt;= check) ... @mplungjan 现在可以使用了,谢谢。 【参考方案1】:

通过在 check 示例中的日期和时间之间使用空格,您偏离了规范。这意味着实现可以使用本地时间或 UTC,或者拒绝完全解析它。

使用the date time format in the specification,这基本上是您所拥有的,但使用T 而不是空格,或使用多参数Date 构造函数(用于本地时间),或Date.UTC(将结果传递到@ 987654326@ 构造函数)用于 UTC。如果理想情况下解析字符串,请始终为 UTC 或时区偏移指定 Z。仅日期形式 ("2020-08-19") 以 UTC 解析,但日期时间形式 ("2020-08-19T00:00:00") 以当地时间解析 - 但是,在 2015-2017 年间不止一次更改,因此依赖它有点冒险。

在您的情况下,由于您已经将信息作为单独的变量,我肯定会使用new DateDate.UTC+new Date 的多参数版本(取决于您想要本地还是UTC)。

【讨论】:

以上是关于在iOS设备上比较日期的问题[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在ios设备上打开ios应用程序调试期间创建的txt文件[重复]

它存储在设备上的 IOS 应用程序和数据的大小限制 [重复]

如何在两台 iOS 设备上以纳秒精度执行一段代码?

我们如何以编程方式检测运行设备的iOS版本? [重复]

IOS:设备语言的日期格式

在 iOS 设备上查找正确时间