You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby日期格式互转:2018 Mar 28与2018-03-28转换方法

这个问题我碰到过好多次,本质就是日期字符串的解析与格式化转换,我给你用Python和JavaScript这两种最常用的语言分别演示两种转换的实现方式:

1. 将 "2018 Mar 28" 转为 "2018-03-28"

Python 实现

利用datetime模块的strptime(解析字符串为日期对象)和strftime(将日期对象格式化为字符串)方法:

from datetime import datetime

# 原始日期字符串
original_str = "2018 Mar 28"
# 解析:%Y=四位年份,%b=月份缩写(如Mar),%d=两位日期
date_obj = datetime.strptime(original_str, "%Y %b %d")
# 格式化:%m=两位数字月份
target_str = date_obj.strftime("%Y-%m-%d")

print(target_str)  # 输出: 2018-03-28

小提示:如果你的Python环境默认是中文 locale,可能解析月份缩写会报错,可以提前设置:import locale; locale.setlocale(locale.LC_TIME, 'en_US.UTF-8')

JavaScript 实现

需要先手动映射月份缩写到数字(因为JS的Date对象月份是0开始的),再格式化补零:

const originalStr = "2018 Mar 28";
const [year, monthAbbr, day] = originalStr.split(' ');

// 月份缩写映射表
const monthMap = {
  Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5,
  Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov: 10, Dec: 11
};

// 创建Date对象
const dateObj = new Date(year, monthMap[monthAbbr], day);

// 格式化:补零确保月份和日期是两位
const formattedMonth = String(dateObj.getMonth() + 1).padStart(2, '0');
const formattedDay = String(dateObj.getDate()).padStart(2, '0');
const targetStr = `${year}-${formattedMonth}-${formattedDay}`;

console.log(targetStr); // 输出: 2018-03-28
2. 将 "2018-03-28" 转为 "2018 Mar 28"

Python 实现

同样用datetime模块的解析和格式化方法,只是换一下格式符:

from datetime import datetime

original_str = "2018-03-28"
# 解析:%Y-%m-%d是标准的ISO日期格式
date_obj = datetime.strptime(original_str, "%Y-%m-%d")
# 格式化:%b输出月份缩写
target_str = date_obj.strftime("%Y %b %d")

print(target_str); // 输出: 2018 Mar 28

JavaScript 实现

可以用Intl.DateTimeFormat来快速生成带月份缩写的格式,或者手动映射:

方法一:用Intl.DateTimeFormat(推荐)

const originalStr = "2018-03-28";
const dateObj = new Date(originalStr);

// 配置格式化规则:英文环境,年份数字,月份缩写,日期数字
const formatter = new Intl.DateTimeFormat('en-US', {
  year: 'numeric',
  month: 'short',
  day: 'numeric'
});

// 调整输出顺序并去掉默认逗号
const parts = formatter.formatToParts(dateObj);
const year = parts.find(p => p.type === 'year').value;
const month = parts.find(p => p.type === 'month').value;
const day = parts.find(p => p.type === 'day').value;
const targetStr = `${year} ${month} ${day}`;

console.log(targetStr); // 输出: 2018 Mar 28

方法二:手动映射月份缩写

const originalStr = "2018-03-28";
const dateObj = new Date(originalStr);

const monthAbbrs = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
const year = dateObj.getFullYear();
const month = monthAbbrs[dateObj.getMonth()];
const day = dateObj.getDate();

const targetStr = `${year} ${month} ${day}`;
console.log(targetStr); // 输出: 2018 Mar 28

内容的提问来源于stack exchange,提问作者Fatna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:00:03