Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
转换日期JavaScript_Javascript_Date_Soap - Fatal编程技术网

转换日期JavaScript

转换日期JavaScript,javascript,date,soap,Javascript,Date,Soap,我目前正在用soap web服务中的数据填充一个表,日期以字符串形式出现(示例44250)。我创建了一个函数,将其格式化为yyyy/mm/dd格式 在循环之外,我有以下功能: Date.prototype.addDays = function (days) { var date = new Date(this.valueOf()); date.setDate(date.getDate() + days); return date;

我目前正在用soap web服务中的数据填充一个表,日期以字符串形式出现(示例44250)。我创建了一个函数,将其格式化为yyyy/mm/dd格式

在循环之外,我有以下功能:

Date.prototype.addDays = function (days) {
          var date = new Date(this.valueOf());
          date.setDate(date.getDate() + days);
          return date;
        };
在循环中,我有:

else if (detailsItem == details[i].children[1].innerHTML) {
          const dbDays = days[i].innerHTML;
          const daysInt = parseInt(dbDays, 0);
          const newDate = firstDate.addDays(daysInt);
          // Format the date to a readable value
          const partsDate = {
            date: newDate.getDate(),
            month: newDate.getMonth() + 1,
            year: newDate.getYear() + 1900,
          };
          finalDate = `${partsDate.date}/${partsDate.month}/${partsDate.year}`;
          const td = document.createElement("td");
          td.textContent = finalDate;
          tr.appendChild(td);
          }
elseif只是在填充表时检查何时将日期添加到表中

我现在需要再次使用日期向服务发送请求,但使用以前的格式,但日期必须与按钮单击位于同一行,服务只接受日期的字符串格式,我目前无法确定如何重新格式化

这是按钮点击功能,然后必须将日期格式化为44250等格式

btn.onclick = function () {
                // Loops through the table to find the slot and date when clicking the button on the same row
                var tableRow = document.getElementById("booking-table"),
                  rIndex;
                for (var i = 0; i < tableRow.rows.length; i++) {
                  tableRow.rows[i].onclick = function () {
                    rIndex = this.rowIndex;
                    bookingDay = this.cells[1].innerHTML;
                    bookingSlot = this.cells[2].innerHTML;
                    console.log(bookingSlot, bookingDay);
                  };
                }
btn.onclick=函数(){
//单击同一行上的按钮时,在表格中循环查找插槽和日期
var tableRow=document.getElementById(“预订表”),
rIndex;
对于(变量i=0;i

任何关于如何完成此任务的帮助都将不胜感激。

您可以使用momentjs更轻松地转换日期:, 关于将该值传递给html后日期的使用,能否将该值存储在某个全局变量sesion或localstorage上?然后稍后再使用它?再次调用soap服务?我正在计算您在网页上的工作,因为您正在使用html:)

值“44250”看起来像是自1899年12月31日(纪元)以来的天数,这意味着值“1”将转换为1900年1月1日。如果这是正确的,您可以使用以下方法从中创建日期:

let dbDays = '44250';
let date = new Date(1900, 0, dbDays); // 24 Feb 2021
在这个算法中,1是1900年1月1日,0是1899年12月31日

可以使用反向算法将其转换回历元偏移:

let dbDays = Math.round((date.getTime() - new Date(1899, 11, 31) / 8.64e7);
它得到日期和纪元之间的毫秒差,然后在一天内除以毫秒,并对其进行四舍五入,以说明白天不完全是24小时长的情况下可能产生的日光节约效果。这种方法只适用于整天,不适用于部分天

如果1900年1月1日应该是0而不是1,则该算法可能需要一天,只需调整函数中使用的基准日期即可

从dbDate到Date实例再到Date实例的简单函数有:

//将历元日期转换为日期
函数toDate(dbDays){
返回新日期(1900,0,+dbDays);
}
//将日期转换为纪元日
今日(日期)的功能{
返回数学圆((日期-新日期(1899,11,31))/8.64e7);
}
//将日期格式化为dd/mm/yyyy
函数格式化日期(d){
设z=n=>('0'+n).slice(-2);
返回z(d.getDate())+'/'+z(d.getMonth()+1)+'/'+d.getFullYear();
}
//以d/m/y格式解析日期,任何非数字分隔符
函数解析日期(个){
设[d,m,y]=s.split(/\d/);
返回新日期(y,m-1,d)
}
//范例
设dbDays='44250';
设d1=toDate(dbDays);//2021年2月24日
设ts=formattate(d1);//24/02/2021
设d2=parseDate(ts);//日期对象
console.log(dbDays+'到目前为止:'+ts);

console.log(ts+'到dbDays:'+今天(d2))
将数据层和表示层分开可能是一个好主意。在解析web服务中的数据时,以原始格式存储日期,并且仅使用转换后的可读格式进行表示。这绝对是一个好主意,我们将对此进行研究,非常感谢您提供的提示!这不是答案,可能是这是一个有用的评论。你说得对,我是新来的,对此很抱歉,只是学习如何使用这个Awosome网站!:)非常感谢你的详细解释,感谢你花时间浏览这么多东西,我感谢所有的帮助!