2020-03-16

心态平和、再平和一点。大多数时候拼的是身体,好的心态、脑力、效率都是在好身体基础之上。

先记下昨天看的电影《兆治的小酒馆》。电影的主角是兆治,兆治的生活也算是坎坷不平。小时候家里贫穷,年轻时因为贫穷跟相恋多年的女友小野分手,因为两个贫穷的人是双倍贫穷,分开至少可以让一个人过幸福的生活。生活总是这样,把希望寄托于未知往往有无常的事发生,两人分开后并没有去过幸福的生活。兆治是个平和的人,生活中遇到实在跨不过的坎,就低头,另谋他路。年轻时的兆治是个有潜力的棒球手,热爱棒球,但肩膀受伤后,运动生涯基本就结束了,然后他努力练习左手投球,结果还是不如人意,然后他就不再勉强转去过其他生活。兆治在多年前是个职员,因同事排挤,不能继续做职员,离开工作后,一度因没有收入生活特别窘迫,最后不得不求别人教手艺,以谋生路。但兆治在听到之前排挤他的同事得了重症不久于人世时还是表达了好意,他不怨恨生活中的不公。

电影中的冲突表现在有的人为了理想、靠近理想而过上不幸的生活,造成不幸的是当时社会的习俗,守旧的人群本着善意做着不好的事。一个是小野,一直爱着兆治,但那时还是很传统的社会,离婚和出轨都是不齿的事情,小野备受折磨,最后因过量饮酒去世。另一个是井上,从小的理想是做演员,却被逼去做造船厂老板,最后船厂经营不善被卖,他在自己家独自做演员的梦。兆治既不守旧也不出格,小野死后,忍住悲伤,继续生活。

总结下今天的事。

一个是回执如果平台来源为 0 或者平台来源为空,校验接口会返回一个空对象。代码中在校验支付宝保单那里。这个要记住,这是第二次查这个问题了。第二个问题是新保单列表接口,一个人五要素可能对应多个 ecifId,这样会导致根据 ecifId 查保单列表数据不完整。

今天还是在思考工作效率的事。其实只有一件事是棘手处理不了的事,但这个事一会出来冒个泡一会出来冒个泡,整个下午都觉得乱乱的。还有就是,完善信息,手机号变更这块,页面看了无数次但依然没有记住,导致来来回回看,效率太低。需要把这个流程每个页面记住。再一个是对一个业务整个流程的陌生,刚做完的电子批单下载,别人一问,就有疏忽的地方。想了一会,总结了几点。

  • 要死记硬背一些事情,流程
  • 业务流程的总结,用思维导图整理出来,便于记忆、回忆
  • 练习语言表达,读一些书。之前看过奥巴马很喜欢朗读诗、文章,有益于表达

晚上装了 XMind,看了一些模板,了解了大概脑图的形式:思维导图、逻辑图、组织结构图、树形图、时间轴、鱼骨图、矩阵图。

根据今天工作状态想出来一个泥潭理论:如果没有形成系统条理性,做的越多,越混乱,越容易陷入泥潭,而且这个泥潭是个自增强的。

<think>嗯,用户让我写两个JavaScript函数。第一个要把日期字符串“2020-03-04 16:20:20”转成“3.04”的格式,第二个要判断现在距离那个时间是否超过7天,超过返回true,否则false。好的,我先仔细看一下需求。 首先,处理日期字符串转换。输入的格式是“YYYY-MM-DD HH:mm:ss”,需要变成“M.DD”的形式。比如例子中的3月4号变成3.04,这里要注意月份是不带前导零的,但日期可能需要保留两位,比如03-04变成3.04,而03-10应该是3.10,对吧?所以可能需要去掉月份的前导零,但日期部分如果有的话要保持两位。比如如果是3月5号,应该是3.05吗?或者用户希望的是两位小数形式?可能需要用两位数字表示日,不管是否超过10。例如3月4日变成3.04,而3月12日变成3.12。所以应该提取月份和日期,月份去掉前导零,日期保持两位。 那用JavaScript的话,可以用Date对象来处理。首先把输入的字符串转成Date对象。字符串是“2020-03-04 16:20:20”,但要注意,在Safari中,这种格式可能有问题,可能需要替换中间的格为T,或者用其他方法解析。比如: var dateStr = '2020-03-04 16:20:20'; var date = new Date(dateStr.replace(' ', 'T')); 这样可能更兼容。 或者使用split方法拆分日期和时间部分,然后处理。不过可能直接用Date构造函数可能有问题,所以最好替换格为T,以符合ISO格式,这样解析更可靠。 得到Date对象后,获取月份和日期。月份的话,getMonth()返回的是0-11,所以要加1。比如3月的话,getMonth()返回2,加1得到3。日期用getDate(),得到的是4,需要格式化为两位,前面补零的话可以用padStart(2, '0')。例如4变成'04',12变成'12'。然后组合成“月份.日期”的格式,其中月份不需要补零,比如3而不是03。所以步骤是: 1. 将输入字符串解析为Date对象。 2. 获取月份,加1,转成字符串,去掉前导零。比如如果是3月,得到3;如果是11月,得到11。 3. 获取日期,转成两位字符串,如04、12等。 4. 合并为“月份.日期”的字符串。 例如: function formatDateToMD(dateStr) { const date = new Date(dateStr.replace(' ', 'T')); const month = date.getMonth() + 1; // 1-12 const day = date.getDate().toString().padStart(2, '0'); return `${month}.${day}`; } 测试一下这个函数是否正确。比如输入'2020-03-04 16:20:20',月份是3,日期是04,应该返回'3.04'。如果是'2020-12-10 00:00:00',月份是12,日期是10,返回'12.10'。看起来没问题。 然后是第二个函数,判断是否超过7天。7天的计算需要考虑时间差。当前时间用new Date()获取,然后计算两者的差异。注意7天是7*24*60*60*1000毫秒。如果当前时间减去目标时间的差大于等于这个数值,则返回true,否则false。 但需要注意,是否包含等于的情况。比如刚好7天的时候是否算作过去。用户说“过去7天”,所以超过或者等于的话返回true? 比如,如果当前时间是2020-03-11 16:20:20,那么刚好是7天后,应该返回true?或者是否要严格超过?这个问题需要明确。假设用户的意思是超过等于7天返回true。那么比较的时候: function isOverSevenDays(targetDateStr) { const targetDate = new Date(targetDateStr.replace(' ', 'T')); const currentDate = new Date(); const diff = currentDate - targetDate; // 毫秒数 return diff >= 7 * 24 * 60 * 60 * 1000; } 但需要考虑时区的问题,因为Date对象解析字符串时可能会根据本地时区转换。比如,如果输入的时间是UTC时间,但本地时区不同,可能导致计算的差异。例如,如果原始日期字符串是UTC时间,而当前时间是根据本地时区计算的,可能会差几个小时。这里用户给出的日期字符串没有时区信息,所以JS会如何处理?例如,在ISO格式中,没有时区的字符串会被当作本地时间吗?或者当作UTC? 例如,在ES5中,字符串如“2020-03-04T16:20:20”会被解析为本地时间,而带有Z的才是UTC。所以这里的处理可能存在时区问题。如果用户希望的是不考虑时区,直接按本地时间计算,那可能没问题。但如果有跨时区的情况,可能会有差异。不过用户可能没有说明这一点,所以假设他们是在同一时区下处理,或者按本地时间处理。 比如,如果目标时间是2020-03-04 16:20:20本地时间,当前时间也是本地时间,那么差值是准确的。否则可能会有问题。但用户可能没有考虑这一点,所以按常规处理即可。 综上,函数的大致结构是正确的。但需要注意测试时区的影响。例如,当用户在不同时区运行时,结果可能不同。但可能用户的需求就是基于本地时间的判断,因此这个方法是可行的。 现在整合两个函数,并测试可能的边界情况。例如,转换函数是否正确处理单数月和日期,如1月5日应该是1.05,而12月9日应该是12.09。第二个函数,当刚好7天的时候返回true,比如目标时间是2020-03-04 16:20:20,当前时间是2020-03-11 16:20:20,差值正好是7天,应该返回true。如果提前一秒,则返回false。 可能的错误点: 1. 月份的处理:getMonth()返回0-11,必须加1。 2. 日期是否补零:使用padStart(2, '0')来确保两位。 3. 时间差计算时的时区问题。 4. 日期字符串解析的问题,比如原字符串中的格需要替换为T,否则某些浏览器可能无法正确解析。 所以最终的两个函数应该是这样的: 第一个函数: function formatDateToMD(dateStr) { const date = new Date(dateStr.replace(' ', 'T')); const month = date.getMonth() + 1; // 转为1-12 const day = date.getDate().toString().padStart(2, '0'); return `${month}.${day}`; } 第二个函数: function isOverSevenDays(targetDateStr) { const targetDate = new Date(targetDateStr.replace(' ', 'T')); const currentDate = new Date(); const sevenDaysMs = 7 * 24 * 60 * 60 * 1000; return (currentDate - targetDate) >= sevenDaysMs; } 测试案例: 对于第一个函数,输入'2020-03-04 16:20:20'应该输出'3.04',输入'2020-12-10 00:00:00'输出'12.10',输入'2020-01-01 12:00:00'输出'1.01'。 对于第二个函数,假设当前时间是2020-03-11 16:20:20,与目标时间相差正好7天,返回true。如果是2020-03-11 16:20:19,则返回false。 但需要注意,如果原日期字符串被解析为带时区的,比如在某些环境下可能不同,这里可能存在风险。但用户可能没有特殊说明,所以默认处理即可。</think>分步解释: **第一个函数:将日期字符串转为 "M.DD" 格式** 1. **解析时间字符串** 使用 `new Date()` 转换字符串为日期对象,注意将格替换为 `T` 保证兼容性: ```javascript const date = new Date('2020-03-04 16:20:20'.replace(' ', 'T')) ``` 2. **提取月份和日期** - `getMonth()` 返回 0-11,需 `+1` 得到真实月份 - `getDate()` 返回日期(1-31),用 `padStart(2, '0')` 补足两位: ```javascript const month = date.getMonth() + 1 // 结果: 3 const day = date.getDate().toString().padStart(2, '0') // 结果: "04" ``` 3. **拼接结果** 直接组合字符串: ```javascript return `${month}.${day}` // 结果: "3.04" ``` **第二个函数:判断是否超过7天** 1. **计算时间差** 将两个日期对象直接相减,得到毫秒数差值: ```javascript const diffMs = new Date() - targetDate ``` 2. **比较7天毫秒数** 7天 = `7天 × 24小时 × 60分钟 × 60秒 × 1000毫秒`: ```javascript return diffMs >= 7 * 24 * 60 * 60 * 1000 ``` --- 完整代码实现: ```javascript /** * 将日期字符串格式化为 "M.DD" 形式 * @param {string} dateStr 格式为 "YYYY-MM-DD HH:mm:ss" * @returns {string} 例如 "3.04" */ function formatDateToMD(dateStr) { const date = new Date(dateStr.replace(' ', 'T')); const month = date.getMonth() + 1; // 转为1-12 const day = date.getDate().toString().padStart(2, '0'); return `${month}.${day}`; } /** * 判断当前时间是否超过目标时间7天 * @param {string} targetDateStr 格式为 "YYYY-MM-DD HH:mm:ss" * @returns {boolean} */ function isOverSevenDays(targetDateStr) { const targetDate = new Date(targetDateStr.replace(' ', 'T')); const currentDate = new Date(); const sevenDaysMs = 7 * 24 * 60 * 60 * 1000; return (currentDate - targetDate) >= sevenDaysMs; } ``` --- **验证示例:** ```javascript // 示例1:格式化日期 console.log(formatDateToMD('2020-03-04 16:20:20')); // 输出: "3.04" console.log(formatDateToMD('2022-12-31 23:59:59')); // 输出: "12.31" // 示例2:判断时间差 const now = new Date(); const sevenDaysAgo = new Date(now - 7 * 24 * 60 * 60 * 1000 + 1000); // 7天前+1秒 console.log(isOverSevenDays(sevenDaysAgo.toISOString().slice(0,19).replace('T',' '))); // 输出: true const sixDaysAgo = new Date(now - 6 * 24 * 60 * 60 * 1000); // 6天前 console.log(isOverSevenDays(sixDaysAgo.toISOString().slice(0,19).replace('T',' '))); // 输出: false ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值