首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Web智能中两个时间戳之间的营业时间的精确计算

Web智能中两个时间戳之间的营业时间的精确计算
EN

Stack Overflow用户
提问于 2019-12-06 17:07:37
回答 1查看 2.1K关注 0票数 2

Web 中,我试图在报告级别计算两个时间戳之间的工作/工作时间数。

到目前为止,我已经能够计算出这两个日期之间的总时数,不包括周末的工作日总数。

营业日方法:

代码语言:javascript
复制
Business Days variable = [Days Between Assignment + Completion]-(2 * [# of weekends])

Days between variable := TimeBetween([Assignment Date / Time];[Completion Date / Time];DayPeriod)

Calculate weekends := DaysBetween(LastDayOfWeek(Min([Assignment Date / Time]));LastDayOfWeek([Completion Date / Time])) / 7

创建的变量:

  • BusinessStartTime = 8:00 AM
  • BusinessEndTime = 5:00 PM
  • BusinessDaysBetweenStartandEnd
  • TimeBetweenStartandEnd

困难之处在于使计算只在8:00 AM5:00 PM的营业时间之间计算。

两个对象的示例时间戳:

启动时间: Sep 27, 2019 7:53:27 AM

完成时间: Oct 9, 2019 2:29:24 PM

使用SAP平台4.2和我正在创建的报告是通过BusinessObjects智能完成的。

EN

回答 1

Stack Overflow用户

发布于 2019-12-06 23:16:44

我的方法做了许多假设--…

  • 您有一种方法来计算一个日期范围内的业务天数。在我的公司,我们有一个日历表,指定一个每天作为一个营业日或不。无论如何,你的公司可能会过不同的假期。
  • --日期范围的第一天和最后一天--实际上是工作日。--

下面是…的基本方法

minutes.

  • Convert

  • 确定一个工作日的时间(以分钟为单位)。

  • 在指定的日期范围内查找完整的工作日天数。

  • 在第一天查找业务分钟数。

  • 在最后一天查找业务分钟数。

<代码>H 115将所有的业务天数加到小时和分钟。H 218g 219

您可能可以在一个变量中这样做,但这使您很难理解发生了什么。我将使用很多变量来展示这个计算的过程。

首先,创建两个变量来定义24小时内工作日的开始和结束。你可以做12小时的工作,但那会更复杂。

代码语言:javascript
复制
Beginning of Day="8:00"

End of Day="17:00"

现在创建一系列与工作日相关的变量。开始的一天分钟结束的一天分钟变量分别是从午夜开始的分钟数。

代码语言:javascript
复制
Beginning of Day Today=ToDate(FormatDate(CurrentDate(); "yyyy-MM-dd") + " " + [Beginning of Day]; "yyyy-MM-dd H:mm")

End of Day Today=ToDate(FormatDate(CurrentDate(); "yyyy-MM-dd") + " " + [End of Day]; "yyyy-MM-dd H:mm")

Beginning of Day Minutes=(ToNumber(FormatDate([Beginning of Day Today]; "H"); "#") * 60) +ToNumber(FormatDate([Beginning of Day Today]; "mm"); "#")

End of Day Minutes=(ToNumber(FormatDate([End of Day Today]; "H"); "#") * 60) +ToNumber(FormatDate([End of Day Today]; "mm"); "#")

Business Day Minutes=[End of Day Minutes] - [Beginning of Day Minutes]

我们准备开始处理特定的日期时间,在这段时间内,我们试图找到办公时间。创建两个变量来保存开始值和完成值。

代码语言:javascript
复制
Start Time=ToDate("2019-09-27 7:53:27 AM"; "yyyy-MM-dd h:mm:ss a")

Completion Time=ToDate("2019-10-09 2:29:24 PM"; "yyyy-MM-dd h:mm:ss a")

接下来,我想要创建变量,以查找每个日期范围值自午夜以来的分钟数。

代码语言:javascript
复制
Start Time Minutes=(ToNumber(FormatDate([Variables].[Start Time]; "H"); "#") * 60) + ToNumber(FormatDate([Variables].[Start Time]; "mm"); "#")

Completion Time Minutes=(ToNumber(FormatDate([Variables].[Completion Time]; "H"); "#") * 60) + ToNumber(FormatDate([Variables].[Completion Time]; "mm"); "#")

我们已经奠定了基础。现在我们已经准备好真正投入其中了。我们需要找到完整的工作日数。为了简单起见,我使用的是DaysBetween()函数。您的计算将特定于您的组织。

代码语言:javascript
复制
Full Business Days=DaysBetween([Variables].[Start Time];[Variables].[Completion Time]) - 1

让我们计算一下第一天和最后一天的营业时间在多少分钟内。如果开始时间是在营业日开始之前,我们将认为这是一个完整的一天。同样,如果完成时间是在工作日结束后,我们将认为这是一个完整的一天。

代码语言:javascript
复制
Minutes on Start Day=If([Start Time Minutes] < [Beginning of Day Minutes]; [Business Day Minutes]; [End of Day Minutes] - [Start Time Minutes])

Minutes on Completion Day=If([Completion Time Minutes] > [End of Day Minutes]; [Business Day Minutes]; [Completion Time Minutes] - [Beginning of Day Minutes])

现在,我们可以计算总分钟,然后将其转换为小时和分钟。

代码语言:javascript
复制
Business Minutes=([Full Business Days] * [Business Day Minutes]) + [Minutes on Start Day] + [Minutes on Completion Day]

Business Hours and Minutes=FormatNumber(Floor([Business Minutes] / 60) ;"#") + ":" + FormatNumber(Mod([Business Minutes]; 60); "0#")

我创建了与一天开始和一天结束值相关联的输入控件,以方便地调整它们。

为了演示如何处理来自查询的结果,我使用以下SQL创建了一个免费的SQL查询。这是用于Server的。我不知道其他数据库平台可能需要如何改变这种情况。

代码语言:javascript
复制
SELECT '2019-09-27 7:53:27 AM' AS [Start Time]
     , '2019-10-09 2:29:24 PM' AS [Completion Time]
UNION
SELECT '2019-12-15 1:19:35 PM' AS [Start Time]
     , '2019-12-16 4:31:11 PM' AS [Completion Time]
UNION
SELECT '2019-12-28 8:02:473 AM' AS [Start Time]
     , '2019-12-28 4:17:34 PM'  AS [Completion Time]
UNION
SELECT '2019-12-30 9:02:13 AM'  AS [Start Time]
     , '2020-01-03 11:53:58 PM' AS [Completion Time];

我所需要做的就是根据查询而不是硬编码的值,用日期时间范围值来更改这两个变量。

代码语言:javascript
复制
Start Time=[Query 1].[Start Time]
Completion Time=[Query 1].[Completion Time]

希望您能够使这种方法适应您的情况。

诺埃尔

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59217493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档