为了账号安全,请及时绑定邮箱和手机立即绑定

方法多种,选择随已定

标签:
JavaScript

生产系统分早晚班问题,经约定,每天七点之前,所有生产记录,算前一天处理。因为系统记录产生的日期,是获取当前日期,需要改写一下,七点之前的取到的当天日期需要减去1天。解决方法可以多种,前台程序处理,或是可以数据库中处理。

程序处理:

5acf07370001405b00110016.jpgGetGenerateDate  string GetGenerateDate()
        {
            DateTime dateTime1 = DateTime.Now;
            DateTime dateTime2 = Convert.ToDateTime(dateTime1.ToString("yyyy-MM-dd") + " " + "07:00:00");

            if (DateTime.Compare(dateTime1, dateTime2) < 0)
            {
                dateTime1 = dateTime1.AddDays(-1);
            }

            return dateTime1.ToString("yyyy-MM-dd"); 
        }

 

数据库端处理,和前台程序的函数基本上一样:

5acf07370001405b00110016.jpgudf_GetGenerateDate  CREATE FUNCTION [dbo].[udf_GetGenerateDate]()
 RETURNS DATE
 AS
 BEGIN    
    DECLARE @d DATETIME = CURRENT_TIMESTAMP
    DECLARE @d2 DATETIME = CONVERT(DATETIME,CONVERT(NVARCHAR(20),CAST(@d AS DATE)) + ' ' + '07:00:00')
    
    --下面这个函数,可以参考链接:
    --http://www.cnblogs.com/insus/archive/2011/06/24/2089005.html
    IF ([dbo].[DateTimeCompare](@d,@d2) < 0)
        SET @d = DATEADD(day,-1,@d)
    
    RETURN  CAST(@d AS TIME)
    
 END


另外一种方法,也是在数据库中处理,也许要比上一个函数,简单得多,只是判断当前的时间是否是在0点到7点之间,如果是,日期减1天:

5acf07370001405b00110016.jpgudf_GetGenerateDate  CREATE FUNCTION [dbo].[udf_GetGenerateDate]()
 RETURNS DATE
 AS
 BEGIN        
    DECLARE @TimeStamp TIME = '07:00:00'
    DECLARE @cDate DATETIME = CURRENT_TIMESTAMP
    
    IF (CAST(@cDate AS TIME) BETWEEN '00:00:00' AND @TimeStamp)        
        SET @cDate  = DATEADD(day,-1,@cDate)
    RETURN CAST(@cDate AS DATE)
    
 END

 

 

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消