date - Applescript:通过添加具有奇怪行为的天数来增加月份
问题描述
所以我试图定义一个增加月份的函数。但已经在开始时,我偶然发现了以下问题。
set testdate to (current date)
set the month of testdate to (1 as integer)
set the day of testdate to (1 as integer)
tell testdate to set {day} to {day + 32 * 4}
testdate
我希望至少能得到 2020 年 5 月的某个日期的输出(当然不是 5 月 1 日,而是开始时的某个日期),但是,输出是
date "Montag, 26. August 2019 um 15:53:13"
反而。有人可以向我解释一下吗?
例如,如果我将上面的“4”更改为“3”,那么我会得到预期的结果
date "Montag, 6. April 2020 um 16:06:21"
在 red_menace 的帮助下,我能够实现以下增加几个月的过程。
on addMonths onto oldDate by m
copy oldDate to newDate
set newDate to newDate + (days * 31 * m)
if newDate's day is not oldDate's day then set newDate to (newDate) - ((newDate's day) - (oldDate's day)) * days
return newDate
end addMonths
(但是,仍然没有解释为什么会发生此错误。)
解决方案
我不认为这是一个错误,因为它可能是日期对象在内部实现方式的结果(我的猜测是 127 有效,但 128 无效)。该day
属性适用于一个月中的某一天 (1 - 31),因此通过使用越界天数作弊可能会在几天内溢出到附近的月份,但他们可能不会费心检查超出大小的东西分配的结构。
处理日期时,时差的正常过程是增加或减少秒数。date 类具有各种属性,例如day
and month
,但也有常量days
or hours
,它们分别包含一天或一小时的秒数(它们只转到weeks
,因为月份没有固定的天数):
set testdate to (current date) -- get a date object
set the month of testdate to 1 -- set new month
set the day of testdate to 1 -- set new day
log 24 * hours
log days
return testdate + (days * 32 * 4) -- add to the date
请参阅 AppleScript 语言指南中的日期类参考。
推荐阅读
- javascript - 如何在 React Native 中从 mp4 创建缩略图?
- java - 手动将小时数添加到 log4j 时间戳?
- c++ - 使用 POD-struct 的 reinterpret_cast 理解代码示例
- android - 无法通过奥利奥的网络提供商获取位置
- django - 在 Django 中验证电子邮件的 ArrayField 的每个值
- matlab - 'cell' 类型的输入参数的未定义运算符 '.*'
- facebook - 2018 版 - 在 FB 原生应用程序中打开链接,而不是在浏览器中
- mysql - 在Vue中更新Mysql数据时如何渲染图表?
- php - 如何使用 MySQL 修复虚假的 1292 'Incorrect date value' 错误?
- scheme - 在 Racket 中测量经过时间的最佳方法是什么?