明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2132|回复: 10

[函数] 计算两个日期间隔天数

  [复制链接]
发表于 2019-6-19 12:08:33 | 显示全部楼层 |阅读模式
本帖最后由 tryhi 于 2019-6-19 12:10 编辑

;;由给定的日期返回儒略日期(公元前4713)
;;(try-Date2Value 2016 4 11)
(defun try-Date2Value (Year Month Day / a_date b_date c_date e_date f_date juliandate)
  (if (< Month 3)(setq Year(1- Year)Month(+ 12 Month)))
  (setq
    a_date (fix(/ Year 100.))
    b_date (fix(/ a_date 4.));每4年1461天
    c_date (- 2.0 (- a_date b_date))
    e_date (fix(/ (* 1461. (+ Year 4716.0)) 4));多少个4年
    f_date (fix(/ (* 153. (1+ Month)) 5.))
    JulianDate (fix(+ c_date Day e_date f_date (- 1524)))
  )
)
;;由儒略日期返回普通日期
;;(try-Value2Date 2457490);> '(25016 4 11)
(defun try-Value2Date (Value / _af _bf _cf _df _ef _ff _wf _xf _zf day month return year)
  (if (> Value 0)
    (setq
      _zF (fix Value)
      _wF (fix(/ (- _zF 1867216.25) 36524.25))
      _xF (fix(/ _wF 4.))
      _aF (+ _zF 1 _wF (- _xF))
      _bF (+ _aF 1524.)
      _cF (fix(/ (- _bF 122.1) 365.25))
      _dF (fix(* 365.25 _cF))
      _eF (fix(/ (- _bF _dF) 30.6001))
      _fF (fix(* 30.6001 _eF))
      Day (- _bF _dF _fF)
      Month (if (< (1- _eF)13)(1- _eF)(- _eF 13))
      Year (if(< Month 3)(- _cF 4715)(- _cF 4716))
      Return (list (fix Year)(fix Month)(fix Day))
    )
  )
  
)
;;返回两个日期的间隔天数
;(try-Date-number '(2016 2 30)'(2016 4 8))
(defun try-Date-dist (a b)
  (apply '-(mapcar '(lambda(x)(apply 'try-Date2Value x))(list b a)))
)

try-Date2Value 由给定的日期返回儒略日期(公元前4713)
try-Value2Date 由儒略日期返回普通日期
try-Date-dist 返回两个日期的间隔天数

从AU3自带的扩展函数里面看到的,转为lsp代码给大家,附件跟原文是一样的内容

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-10-22 13:38:56 | 显示全部楼层
'(2016 2 30),2016年2月30日
 楼主| 发表于 2021-10-22 15:46:26 | 显示全部楼层
Carter丶Bo 发表于 2021-10-22 13:38
'(2016 2 30),2016年2月30日

什么情况下返回2月30
发表于 2021-10-25 15:04:34 | 显示全部楼层
不是返回2月30日,是
;;返回两个日期的间隔天数
;(try-Date-number '(2016 2 30)'(2016 4 8))
你举例写的 '(2016 2 30),不会返回2016年2月30日
 楼主| 发表于 2021-10-25 16:10:36 | 显示全部楼层
原来是举例不恰当,这个问题不大
发表于 2022-7-15 15:15:52 | 显示全部楼层
有个保留函数 ymd->fix可以解决这个问题
发表于 2022-8-1 19:03:36 | 显示全部楼层
本帖最后由 yanhongguang202 于 2022-8-1 19:07 编辑

删了,我的好啰嗦,还是海神的好
 楼主| 发表于 2023-5-18 17:46:52 | 显示全部楼层
baitang36 发表于 2022-7-15 15:15
有个保留函数 ymd->fix可以解决这个问题

不知道怎么用,
(- (ymd->fix 2023 4 30) (ymd->fix 2022 4 30))

返回372,似乎不太对,应该是365吧
发表于 2023-5-18 22:30:33 | 显示全部楼层
tryhi 发表于 2023-5-18 17:46
不知道怎么用,
(- (ymd->fix 2023 4 30) (ymd->fix 2022 4 30))

ymd->fix从公元0年1月1号开计数,默认每月都是31天,所以仅仅是个有限准确,不跨月的解决方案

评分

参与人数 1明经币 +1 收起 理由
tryhi + 1 感觉没什么用啊这个ymd函数

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-16 20:25 , Processed in 0.173127 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表