【问题标题】:sethours updating time part but not the date part in date time fieldsethours 更新时间部分,但不更新日期时间字段中的日期部分
【发布时间】:2015-09-22 19:11:49
【问题描述】:

我有一个日期时间字段,格式仅为日期。另外,我在 onload 处添加了一个脚本,这样每当访问记录时,12:00 都应该添加到该字段中。它按预期工作,并在时间部分增加了 12 小时。但它不会相应地更新日期。

例如,我的日期成为经理字段,其值为'Thu Apr 30 23:00:00 UTC-1200 1992'。添加 12 小时后,它会将时间部分更新为 'Thu Apr 30 12:00:00 UTC-1200 1992',但不要在其日期中添加任何内容。以下是我要更新的 sn-p。

    function updateFields(field){
    var dateField = Xrm.Page.getAttribute(field);
    if(dateField.getValue()== null)
    {
        dateField.setValue(new Date());
    }
    dateField.setValue(dateField.getValue().setHours(12, 0, 0));
}

如果我做错了什么,请告诉我。

【问题讨论】:

    标签: javascript date datetime dynamics-crm-2011 microsoft-dynamics


    【解决方案1】:

    setHours 只是改变时间,它不计算任何东西。

    执行这种计算的最常见方法是:

    var numberOfHours = 12; // how many hours you want to add. Can be *negative* too.
    var millisecondsInAnHour = 60 * 60 * 1000; // this is constant
    var offset = numberOfHours * millisecondsInAnHour;
    var newFieldValue = dateField.getValue().getTime() + offset;
    dateField.setValue(newFieldValue);
    

    基本上,您获取值的时间并对其加/减毫秒数。

    【讨论】:

      【解决方案2】:

      所以要明确一点,您想将 12 小时添加到当前日期值(而不是将时间元素设置为 12:00)?

      setHours 只是设置时间,它不会将时间增加 12 小时。如果您多次这样做,则始终是 12 小时,而不是 0 - 12 - 24 小时。

      如果您将setHoursgetHours 结合使用,您应该能够实现所需的行为。

      var d1 = new Date();
      console.log("Original Date: " + d1);
      d1.setHours(12);
      console.log("Set 12 Hours Once: " + d1);
      d1.setHours(12);
      console.log("Set 12 Hours Twice: " + d1);
      
      var d2 = new Date();
      console.log("Original Date 2: " + d2);
      d2.setHours(d2.getHours() + 12);
      console.log("Add 12 Hours Once: " + d2);
      d2.setHours(d2.getHours() + 12);
      console.log("Add 12 Hours Twice: " + d2);
      

      输出:

      Original Date: Tue Sep 22 2015 09:45:39 GMT+0100 (GMT Daylight Time)
      Set 12 Hours Once: Tue Sep 22 2015 12:45:39 GMT+0100 (GMT Daylight Time)
      Set 12 Hours Twice: Tue Sep 22 2015 12:45:39 GMT+0100 (GMT Daylight Time)
      Original Date 2: Tue Sep 22 2015 09:45:39 GMT+0100 (GMT Daylight Time)
      Add 12 Hours Once: Tue Sep 22 2015 21:45:39 GMT+0100 (GMT Daylight Time)
      Add 12 Hours Twice: Wed Sep 23 2015 09:45:39 GMT+0100 (GMT Daylight Time)
      

      【讨论】:

        【解决方案3】:

        我刚刚更新了我的代码并且它工作正常。请查看以下代码 sn-p。

        function updateFields(field){
        var dateField = Xrm.Page.getAttribute(field);
        if(dateField.getValue()== null)
        {
            dateField.setValue(new Date());
        }
        dateField.setValue(dateField.getValue().setHours(dateField.getValue().getHours() + 12));}
        

        【讨论】:

          猜你喜欢
          • 2010-11-22
          • 2019-07-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-21
          • 1970-01-01
          相关资源
          最近更新 更多