首页 > 解决方案 > 如何将 MS Access 中的日期选择器默认为当天的 0hrs 0min 0sec?

问题描述

我可以使用日期选择器更改日期,但是,前一个选择中的 hrs:minutes:seconds 也随之而来,这也使得这一天不会从 0hs:0min:0sec 开始。让我解释:

我正在使用前端/后端访问/服务器表,在访问前端我有两个日期选择器(txtFrom 和 txtTo)和一个 cmb 框作为周期选择器(cmbPeriod = 今天、本周、本月等)

日期选择器上的日期以三种方式更改,我遇到了其中一种问题。如果您将 cmbPeriod、txtFrom 和 txtTo 留空,则 txtFrom 和 txtTo 将填充所有报告的第一个和最后一个日期,如下所示:

If Me.cmbPeriod & "" = "" Then
        If Me.txtFrom & "" = "" Then Me.txtFrom = DMin("[Date]", "qryUnapprovedreports")
        If Me.txtTo & "" = "" Then Me.txtTo = DMax("[Date]", "qryUnapprovedReports")
    End If

当我使用此方法时,以下是一个示例:

txtFrom = 06/29/18 1:56:25 PM
txtTo   = 07/20/18 3:50:39 PM

注意:对于操作员来说,时间无关紧要,所以我要求他们只选择日期。

当我更改日期选择器上的日期时,hrs:min:sec 跟随我选择新的日期而不是一天的开始:另一个例子:

txtFrom Date-Picker = 07/13/2018. gives
txtFrom = 07/13/2018 1:56:25 PM and I need it as 
txtFrom = 07/13/2018 0:00:00 AM

这是缩短我的时间,不包括在 1:56 之前提交的报告,这是错误的。

如何强制访问日期选择一天的开始并忽略或重置时间。

标签: ms-accessdatepickervba

解决方案


要从日期中删除时间,您只需删除小数点后的所有内容。

有几种方法可以做到这一点,包括舍入截断

以您的示例:

DMax("[Date]", "qryUnapprovedReports")

...返回一个 DateTime,您可以将其舍入到午夜:

ROUND(DMax("[Date]", "qryUnapprovedReports"),0)

...将四舍五入到最接近的一整天(因此2001-01-01 4:20pm变成2001-01-02 12:00am),或者,

INT(DMax("[Date]", "qryUnapprovedReports"))

..会截断日期,所以它会切断时间(所以2001-01-01 4:20pm变成2001-01-01 12:00am


日期以数字形式存储在 MS Office 中。

1 = 1 day

Therefore:
    0.5 = half a day (or "12:00 noon")
    0.25 = quarter day (or "6:00am")
    1 hour = 1/24th of a day = approx 0.041667
    1 second = approx 0.0000115740740740741

有关更多信息,请参见:

相同的信息适用于所有 MS Office 应用程序。在线提供大量教程和代码示例,可帮助您在 Access(或 Excel)中处理日期和时间。


推荐阅读