Hacker News 中文摘要

RSS订阅

日期已过时,时间性正当时 -- Date is out, Temporal is in

文章摘要

文章指出JavaScript中的Date对象存在不足,推荐使用新的Temporal API来处理日期时间操作,认为这能提供更可靠和直观的日期处理方式。作者虽然通常欣赏JavaScript的特性,但也承认Date对象的问题需要改进。

文章总结

标题:Date已成过去,Temporal正当其时

文章主要讨论了JavaScript中现有的Date对象的缺陷以及即将引入的Temporal对象的优势。以下是核心内容:

  1. Date对象的问题
  • 设计缺陷:Date对象是从Java仓促移植而来,存在诸多不一致性
  • 命名不当:Date实际上表示的是时间而非日期
  • 时区处理差:仅支持本地时区和GMT
  • 可变性风险:作为可变对象,容易在操作中被意外修改
  • 解析混乱:对日期字符串的解析规则不一致
  1. Temporal的解决方案
  • 作为命名空间对象提供多种时间处理类
  • 不可变设计:所有操作都返回新对象
  • 清晰的API:提供PlainDate、ZonedDateTime等专门类型
  • 更好的时区支持
  • 链式调用:支持add/subtract等方法链
  1. 使用对比 Date示例: js const today = new Date(); const tomorrow = new Date(today); tomorrow.setDate(today.getDate() + 1);

Temporal示例: js const today = Temporal.Now.plainDateISO(); const tomorrow = today.add({days:1});

  1. 当前状态
  • Temporal提案已进入TC39标准流程第三阶段
  • Chrome和Firefox已实现初步支持
  • 鼓励开发者试用并提供反馈
  1. 核心优势
  • 更符合时间不可变的本质特性
  • 减少意外修改风险
  • 更直观的API设计
  • 更好的国际化支持

文章认为Temporal将最终取代Date成为JavaScript中处理时间日期的标准方式,尽管Date对象由于Web平台的兼容性要求会长期存在。

(注:已去除广告、作者介绍、新闻订阅等非核心内容,保留技术要点和关键代码示例)

评论总结

以下是评论内容的总结:

1. 关于Temporal API的采用现状

  • 观点:Temporal API的浏览器原生支持率很低(仅1.81%),实际应用受限
    • "The current global availability of native Temporal is 1.81%... we're years from being able to use Temporal in production" (#10)
    • "Is Temporal even in though? Last I checked... I had to use some bleeding edge version of Firefox" (#3)

2. 对Temporal API设计的评价

  • 正面评价:认为其优于旧Date API
    • "it's lovely, and I'd love to see native support for it" (#3)
    • "anything will be an improvement compared to that terrible old API" (#6)
  • 批评意见:指出设计矛盾
    • "Temporal.Instant has no way at all to create it given a current year/month/day" (#8)

3. 关于旧Date API的问题

  • 主要批评
    • 时区处理错误:"JavaScript is interpreting... as midnight UTC... it is 7pm on January 1st in Eastern Standard Time" (#13)
    • 解析规则混乱:"the second interval should start at 50, not 33" (#4)

4. 对文章本身的评价

  • 肯定内容质量
    • "top-notch introduction to this new API" (#9)
  • 批评文风夸张
    • "this exaggerated writing style... I had to scroll all the way to the end to find the actual point" (#7)

5. 其他相关讨论

  • 替代方案:推荐使用polyfill
    • "we've been using this Temporal polyfill and it's been awesome" (#2)
  • 历史背景
    • "Java deprecated... but the class itself was never deprecated" (#11)

注:所有评论均未显示评分(None),部分评论(如#5、#12)因与核心讨论关联较弱未纳入主要观点总结。