zoukankan      html  css  js  c++  java
  • "new Date(time).getTime()"在ios返回NaN

    1、问题描述

     最近做了一个临时小活动,要求超过某个日期后活动隐藏,活动由于没做成可复用性的,后台也没给做接口,就前端写了个判断:假如活动过期日期是2018-11-12凌晨;那么判断当前时间是否超过该活动截止时间,如果超过,活动隐藏;代码中使用了

    new Date().getTime() > new Date('2018-11-12 00:00:00').getTime() //如果为真,活动结束;

      来比较活动是否结束,当时只在chrome做了测试,然后感觉肯定没问题,就怼上去了。然后活动结束了。运营反馈说活动还没关闭,我打开我手机(安卓手机)看了看活动没有了。然后在看看同事的苹果手机,果然还在,看了多个手机发现只有ios有这个情况,于是在safari控制台测试该代码发现判断条件始终不满足,

    new Date('2018-11-12 00:00:00').getTime() //在chrome和safari上输出结果不一样
    

      chrome下

      

       safari下

      

    2、分析

      在网上找的原因有多中,看了MDN上 文档;也没发现特别的规范,官方给了几个例子:

    创建 Date 实例用来处理日期和时间。Date 对象基于1970年1月1日(世界标准时间)起的毫秒数。
    var today = new Date();
    var today = new Date(1453094034000); // by timestamp(accurate to the milliseconds)
    var birthday = new Date('December 17, 1995 03:24:00');
    var birthday = new Date('1995-12-17T03:24:00');
    var birthday = new Date(1995, 11, 17);
    var birthday = new Date(1995, 11, 17, 3, 24, 0);
    

      

    构造函数
    new Date();
    new Date(value);
    new Date(dateString);
    new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);
    

      Note: 需要注意的是只能通过调用 Date 构造函数来实例化日期对象:以常规函数调用它(即不加 new 操作符)将会返回一个字符串,而不是一个日期对象。另外,不像其他JavaScript 类型,Date 对象没有字面量格式。

      Note: 当Date作为构造函数调用并传入多个参数时,如果数值大于合理范围时(如月份为13或者分钟数为70),相邻的数值会被调整。比如 new Date(2013, 13, 1)等于new Date(2014, 1, 1),它们都表示日期2014-02-01(注意月份是从0开始的)。其他数值也是类似,new Date(2013, 2, 1, 0, 70)等于new Date(2013, 2, 1, 1, 10),都表示时间2013-03-01T01:10:00。

    3、解决

      如果想多个浏览器都能使用,那么就用官方给的demo中日期的写法-- "2018-11-12T00:00:00" ;写成”2018/11/12 00:00:00"也是可以的;如果是动态获得的,就用正则表达式转换一下。

     4、总结

      平时都是自己写自己测试,但是测试还是要严谨点,不能掉以轻心。

  • 相关阅读:
    用JS打开新窗口,防止被浏览器阻止的方法
    谷歌浏览器插件开发教程7
    谷歌浏览器插件开发教程6
    谷歌浏览器插件开发教程5
    谷歌浏览器插件开发教程4
    谷歌浏览器插件开发教程3
    谷歌浏览器插件开发教程2
    谷歌浏览器插件开发教程1
    从网站上偷图偷音乐偷视频教程
    pixijs shader 实现图片波浪效果
  • 原文地址:https://www.cnblogs.com/wangyongshf/p/9925198.html
Copyright © 2011-2022 走看看