【问题标题】:Date in variable reading as "Invalid Date"变量中的日期读取为“无效日期”
【发布时间】:2017-12-30 11:40:14
【问题描述】:

使用以下内容:

var timestart = $('.thisDiv').data("timestart");
var startDateTime = new Date(timestart);

从 ajax 更新的 php 文件中收集日期:

$TimeStart = date( 'Y,m,d,g,i', $TimeStart );

<div class="thisDiv" data-timestart="<?= $TimeStart ?>"></div>

var timestart = $('.thisDiv').data("timestart");

在控制台中,我在登录 timestartstartDateTime 时得到以下信息:

2017,07,24,7,50
Invalid Date

如果我将输出的日期粘贴如下

var startDateTime = new Date(2017,07,24,7,50);

然后它工作正常。知道为什么我会收到 Invalid Date 吗?

【问题讨论】:

    标签: javascript jquery ajax date


    【解决方案1】:

    您的 timestart 变量 (JavaScript) 只是一个字符串。所以它是一个字符串2017,07,24,7,50,而不是那些按顺序排列的元素——它不能像new Date() 期望的那样用作单独的参数。

    一起来看看吧!

    var startDateTime = new Date(2017,07,24,7,50);   // Parameters in order - all OK!
    var startDateTime = new Date("2017,07,24,7,50"); // A single string - single parameter, not OK!
    

    您需要从 PHP 返回正确格式的日期,该格式在 JavaScript 中有效。根据 ECMAScript 标准,适用于所有浏览器的有效格式是 YYYY-MM-DDTHH:mm:ss.sssZ(请参阅底部的参考资料)。要从 PHP 中定义它,您需要将其格式化

    $TimeStart = date('c', $TimeStart);
    

    这将返回一个格式,例如2017-07-24T21:08:32+02:00

    或者,您可以使用 splat/spread-operator ... 并将字符串拆分为元素,我认为这是比上述更好的方法。

    var timestart = $('.thisDiv').data("timestart");  // Get the string: "2017,07,24,7,50"
    timestart = timestart.split(",");                 // Split into array
    var startDateTime = new Date(...timestart);       // Pass as arguments with splat-operator
    

    【讨论】:

    • 我正在删除我的答案,转而支持这个,你的解释与我的基本相同,你提到 splat 操作员会获得奖励分
    • 您不必删除您的答案,它是有效的(而且您的答案也比我快!)。 ;-)
    • “2017-07-24 21:08:32”不是“有效”ECMASript date string。解析依赖于实现,至少在 Safari 中返回一个无效的日期。与其生成要解析的字符串,不如将适当的值直接传递给 Date 构造函数。
    • @RobG 老实说,我不知道。我已经在其他浏览器中进行了测试,但似乎我对格式的工作很幸运。我已经编辑了我的答案以反映这一点。
    【解决方案2】:

    您需要将日期从字符串格式转换为数字。

    var timestart = $('.thisDiv').data("timestart").split(",").map(Number);
    var startDateTime = new Date(...timestart);
    console.log(startDateTime)
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="thisDiv" data-timestart="2017,07,24,7,50"></div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      • 2014-06-24
      相关资源
      最近更新 更多