【问题标题】:mysql to javascript and adding days afterwardsmysql 到 javascript 并在之后添加天数
【发布时间】:2012-02-20 19:56:15
【问题描述】:

我在将天数添加到 mysql 日期时间时遇到问题。 如果您查看我的代码,我会使用 mysql 日期时间并将其转换为 javascript 日期。然后我取另一个字段并将天数添加到 getDate();价值。它没有正确添加。

$(document).ready(function() {
    $('#ProjectExtendDeadline').change(function(){
        var oldDate = $('#ProjectOldDeadline').val();
        var t = oldDate.split(/[- :]/);
        var days = $('#ProjectExtendDeadline').val();        
        var d = new Date(t[0], t[1]+days, t[2], t[3], t[4], t[5]);
        //d.setDate(d.getDate());
        month = d.getMonth();
        date = d.getDate();
        month = (month < 10 ? "0" + (month) : month);
        date = (date < 10 ? "0" + (date) : date);
        var date = d.getFullYear()+"-"+month+"-"+date+" "+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds();
        $('#ProjectNewDeadline').val(date);
    });
});

这是代码运行后的值

如您所见,日期没有改变。我做错了什么?

【问题讨论】:

  • "t[1]+days" 添加天数到月数??不要忘记将字符串转换为整数,否则这是连接
  • 您能准确解释一下您要完成的工作吗?不是很清楚。此外,我发现通过始终处理两者之间的纪元毫秒数来处理 MySQL 和 JavaScript 之间的日期更容易。使用 MySQL 的 UNIX_TIMESTAMP * 1000 和 JavaScript 中的 Date().getTime() 来获取 epoch。

标签: javascript mysql timestamp


【解决方案1】:

实际上,您正在将您的日子添加到月份中。 Date() 构造函数是

new Date(year, mon, day, hour, min, sec)

你正在做

new Date(year, mon+days, day, hour, min sec)
                  ^^^^^---oops?

请注意,您的 date 实际上比 olddate 提前 2 年 5 个月,这是因为您的构造函数实际上是一个字符串连接:

'03' + 2 -> '032' -> octal number -> 26 decimal = 2 years 4 months.

同时,请记住 JS 月份是从 0 开始的,因此您的 MySQL 日期实际上比 JS 中的日期提前 1 个月,所以这 2 年 4 个月实际上是 2 年 5 个月......并且有你的问题。

您可以通过简单地避免大部分代码:

SELECT unix_timestamp(yourdatetimefield) ...

你的查询,然后直接输出到JS:

oldDate = new Date(<?php echo $timestamp ?>000);
// '000' in there to make it a JS-style milliseconds timestamp

【讨论】:

    【解决方案2】:
     var today       =new Date();
     var in_a_week   =new Date().setDate(today.getDate()+7);
    

    ps:t[1]+days 都是字符串,而不是整数(这是月和日的总和??)。它为您提供字符串的连接。将它(一般)重写为 +t[1] + +days

    您的代码将如下所示:

    // from your previous question - it SHOULD be like this or 
    // your month will be incorrect
    var d = new Date(t[0], t[1]-1, t[2], t[3], t[4], t[5]);
    d = new Date().setDate(d.getDate + +days); // here it could be just days
    
    // add your 1 to output month number only here
    month = d.getMonth() + 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 2018-06-18
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-04
      相关资源
      最近更新 更多