TypeScript中字符串与数值、日期时间相互转换的实现方式

 更新时间:2025年08月13日 08:27:25   作者:Juchecar  
在 TypeScript 开发中,字符串、数值和日期时间是最常用的数据类型,它们之间的相互转换是基础且高频的操作,对于初学者来说,掌握这些转换方法能轻松处理数据展示、用户输入解析等场景,下面详细讲解具体实现方式,需要的朋友可以参考下

引言

在 TypeScript 开发中,字符串、数值和日期时间是最常用的数据类型,它们之间的相互转换是基础且高频的操作。对于初学者来说,掌握这些转换方法能轻松处理数据展示、用户输入解析等场景。下面详细讲解具体实现方式。

一、字符串与数值型的相互转换

数值型包括整数(number)和浮点数(number,TypeScript 中统一用number类型表示),与字符串的转换是最常见的需求。

1. 字符串转换为数值(string → number)

(1)转换为整数

使用parseInt()方法,语法为parseInt(字符串, 基数),基数通常为 10(表示十进制)。

// 基本用法
const str1: string = "123";
const num1: number = parseInt(str1, 10);
console.log(num1); // 输出:123(类型为number)
// 处理带小数的字符串(只保留整数部分)
const str2: string = "456.78";
const num2: number = parseInt(str2, 10);
console.log(num2); // 输出:456
// 处理含非数字字符的字符串(解析到非数字字符为止)
const str3: string = "789abc";
const num3: number = parseInt(str3, 10);
console.log(num3); // 输出:789
// 转换失败(返回NaN)
const str4: string = "abc123";
const num4: number = parseInt(str4, 10);
console.log(num4); // 输出:NaN(Not a Number)

(2)转换为浮点数

使用parseFloat()方法,无需指定基数,直接解析字符串中的浮点数。

// 基本用法(纯小数)
const str1: string = "3.1415";
const num1: number = parseFloat(str1);
console.log(num1); // 输出:3.1415
// 整数也会被转换为浮点数
const str2: string = "100";
const num2: number = parseFloat(str2);
console.log(num2); // 输出:100
// 处理科学计数法
const str3: string = "1e3"; // 1×10³
const num3: number = parseFloat(str3);
console.log(num3); // 输出:1000
// 转换失败(返回NaN)
const str4: string = "not a number";
const num4: number = parseFloat(str4);
console.log(num4); // 输出:NaN

(3)通用转换(自动识别类型)

使用Number()函数,可直接将字符串转换为对应的数值类型(整数或浮点数)。 字符串必须完全符合数值格式,否则返回 NaN(比 parseInt/parseFloat 更严格)

console.log(Number("123")); // 输出:123(整数)
console.log(Number("123.45")); // 输出:123.45(浮点数)
console.log(Number("")); // 输出:0(空字符串特殊处理)
console.log(Number("abc")); // 输出:NaN(转换失败)

(4)转换结果验证

转换可能失败(返回NaN),需用isNaN()函数判断:

function safeParseNumber(str: string): number | null {
  const num = parseFloat(str);
  return isNaN(num) ? null : num; // 失败返回null,成功返回数值
}
console.log(safeParseNumber("123.45")); // 输出:123.45
console.log(safeParseNumber("invalid")); // 输出:null

2. 数值转换为字符串(number → string)

(1)基本转换

使用toString()方法或模板字符串:

const num1: number = 123;
console.log(num1.toString()); // 输出:"123"(字符串类型)
const num2: number = 3.14;
console.log(`${num2}`); // 输出:"3.14"(模板字符串转换)

(2)指定小数位数

结合toFixed()方法,转换时保留指定小数位数(返回字符串):

const num: number = 5.678;
console.log(num.toFixed(2)); // 输出:"5.68"(保留2位小数,四舍五入)
console.log(num.toFixed(0)); // 输出:"6"(保留0位小数)

二、字符串与日期时间的相互转换

日期时间在 TypeScript 中用Date对象表示,与字符串的转换需注意格式兼容性。

1. 字符串转换为日期时间(string → Date)

Date构造函数可直接解析特定格式的字符串,推荐使用ISO 8601 标准格式(如YYYY-MM-DD、YYYY-MM-DDTHH:mm:ss)。

(1)解析 ISO 格式字符串

// 仅日期(YYYY-MM-DD)
const dateStr1: string = "2024-06-15";
const date1: Date = new Date(dateStr1);
console.log(date1.toLocaleDateString()); // 输出:2024/6/15(本地格式)
// 日期+时间(YYYY-MM-DDTHH:mm:ss)
const dateTimeStr: string = "2024-06-15T14:30:00";
const dateTime: Date = new Date(dateTimeStr);
console.log(dateTime.toLocaleString()); // 输出:2024/6/15 14:30:00

const iso = "2024-06-01T09:05:07Z";
const d = new Date(iso);
if (isNaN(d.getTime())) throw new Error("日期非法");

// 格式 1:ISO 8601 标准格式(推荐,兼容性最好)
const isoStr: string = "2024-05-20T14:30:45";
const date1: Date = new Date(isoStr); // Mon May 20 2024 22:30:45 GMT+0800

// 格式 2:常见字符串(如 "YYYY/MM/DD HH:mm:ss")
const commonStr: string = "2024/05/20 14:30:45";
const date2: Date = new Date(commonStr); // 同上(部分浏览器支持)

// 格式 3:时间戳(毫秒数)
const timestamp: string = "1716121845123";
const date3: Date = new Date(Number(timestamp)); // 有效(需先转数值)

(2)解析非标准格式字符串

对于其他格式(如MM/DD/YYYY、DD-MM-YYYY),Date构造函数也能解析,但建议手动拆分验证:

// 解析MM/DD/YYYY格式
const str1: string = "06/15/2024";
const date1: Date = new Date(str1);
console.log(date1.toLocaleDateString()); // 输出:2024/6/15
// 手动解析DD-MM-YYYY格式(更可靠)
function parseDDMMYYYY(str: string): Date | null {
  const parts = str.split("-");
  if (parts.length !== 3) return null; // 格式错误
  const day = parseInt(parts[0], 10);
  const month = parseInt(parts[1], 10) - 1; // 月份从0开始(0=1月)
  const year = parseInt(parts[2], 10);
  const date = new Date(year, month, day);
  // 验证日期有效性(如2024-02-30是无效日期)
  return date.getFullYear() === year && 
         date.getMonth() === month && 
         date.getDate() === day ? date : null;
}
console.log(parseDDMMYYYY("15-06-2024")?.toLocaleDateString()); // 输出:2024/6/15
console.log(parseDDMMYYYY("30-02-2024")); // 输出:null(无效日期)

(3)转换失败处理

解析失败时,Date对象会成为Invalid Date,可通过getTime()判断:

const invalidStr: string = "2024-13-01"; // 无效月份(13月)
const invalidDate: Date = new Date(invalidStr);
console.log(isNaN(invalidDate.getTime())); // 输出:true(表示无效日期)

2. 日期时间转换为字符串(Date → string)

(1)默认格式转换

使用Date对象的内置方法:

const now: Date = new Date(2024, 5, 15, 14, 30, 0); // 2024-06-15 14:30:00
// 本地日期字符串
console.log(now.toLocaleDateString()); // 输出:2024/6/15
// 本地时间字符串
console.log(now.toLocaleTimeString()); // 输出:14:30:00
// 本地日期+时间
console.log(now.toLocaleString()); // 输出:2024/6/15 14:30:00

// 数值示例
const price = 1234567.89;
console.log(price.toLocaleString()); // "1,234,567.89"

// 日期示例
const today = new Date();
console.log(today.toISOString());                    // 2024-06-01T09:05:07.000Z
console.log(today.toISOString().slice(0, 10));       // "2024-06-01"
console.log(
  new Intl.DateTimeFormat('zh-CN', {
    year:'numeric', month:'2-digit', day:'2-digit',
    hour:'2-digit', minute:'2-digit', second:'2-digit', hour12:false
  }).format(today).replace(/\//g,'-')
); // "2024-06-01 09:05:07"

const date: Date = new Date(); // 当前时间:假设为 2024-05-20T14:30:45.123Z

// 转日期字符串(格式依赖浏览器/系统)
console.log(date.toString()); // "Mon May 20 2024 22:30:45 GMT+0800 (中国标准时间)"

// 转 ISO 格式(标准格式,推荐)
console.log(date.toISOString()); // "2024-05-20T14:30:45.123Z"

// 转本地日期字符串(如 "2024/5/20")
console.log(date.toLocaleDateString()); // "2024/5/20"

// 转本地时间字符串(如 "14:30:45")
console.log(date.toLocaleTimeString()); // "14:30:45"

(2)自定义格式转换

通过提取日期时间的年、月、日等部分,拼接成指定格式:

function formatDate(date: Date): string {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, "0"); // 补0至2位
  const day = String(date.getDate()).padStart(2, "0");
  const hour = String(date.getHours()).padStart(2, "0");
  const minute = String(date.getMinutes()).padStart(2, "0");
  return `${year}-${month}-${day} ${hour}:${minute}`;
}
const date: Date = new Date(2024, 5, 15, 9, 5);
console.log(formatDate(date)); // 输出:2024-06-15 09:05

// Intl.DateTimeFormat(自定义格式,推荐)
// 通过配置 `options` 参数,可以精确控制年、月、日、时、分的显示格式
const date: Date = new Date(2024, 4, 20, 14, 30, 45); // 2024-05-20 14:30:45(月份 0-11)

// 配置选项
const options: Intl.DateTimeFormatOptions = {
  year: "numeric",   // 年(完整:2024)
  month: "long",     // 月(长格式:五月)
  day: "numeric",    // 日(20)
  hour: "2-digit",   // 时(两位:14)
  minute: "2-digit", // 分(两位:30)
  second: "2-digit", // 秒(两位:45)
  weekday: "long",   // 星期(长格式:星期一)
  timeZoneName: "short", // 时区(如 "GMT+8")
};

// 创建格式化器
const formatter = new Intl.DateTimeFormat("zh-CN", options);

// 格式化结果
console.log(formatter.format(date)); 
// 输出:"2024年5月20日星期一 14:30:45 GMT+8"

(3)国际化格式化

使用Intl.DateTimeFormat实现本地化自定义格式:

const date: Date = new Date(2024, 5, 15);
const options = { 
  year: "numeric", 
  month: "long", 
  day: "numeric", 
  weekday: "long" 
};
console.log(new Intl.DateTimeFormat("zh-CN", options).format(date)); 
// 输出:2024年6月15日 星期六

三、转换场景总结

转换方向常用方法 / 函数注意事项
字符串 → 整数parseInt(str, 10)非数字字符可能导致解析不完整,需验证NaN
字符串 → 浮点数parseFloat(str)支持科学计数法,空字符串返回NaN
数值 → 字符串num.toString() 或 toFixed(n)toFixed(n) 保留 n 位小数(返回字符串)
字符串 → 日期new Date(str) 或手动解析优先使用 ISO 格式,非标准格式需验证有效性
日期 → 字符串toLocaleString() 或自定义拼接国际化格式用Intl.DateTimeFormat

通过掌握这些转换方法,初学者可以轻松处理 TypeScript 中字符串、数值和日期时间之间的数据流转,为数据处理和展示打下坚实基础。实际开发中,记得始终验证转换结果的有效性,避免因无效数据导致的程序错误。

以上就是TypeScript中字符串与数值、日期时间相互转换的实现方式的详细内容,更多关于TypeScript字符串与数值、日期时间互转的资料请关注脚本之家其它相关文章!

相关文章

  • JS异步任务的并行、串行及二者结合用法

    JS异步任务的并行、串行及二者结合用法

    让多个异步任务按照我们的想法执行,是开发中常见的需求,今天我们就来捋一下,如何让多个异步任务并行,串行,以及并行串行相结合,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • 微信小程序如何播放腾讯视频的实现

    微信小程序如何播放腾讯视频的实现

    这篇文章主要介绍了微信小程序如何播放腾讯视频的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 使用layer弹窗和layui表单实现新增功能

    使用layer弹窗和layui表单实现新增功能

    最近做项目遇到这样的需求使用layer在弹窗内完成新增,成功后提示并刷新页面,下面小编给大家带来了使用layer弹窗和layui表单做新增功能,具体实现代码,参考下本文
    2018-08-08
  • Javascript学习笔记 delete运算符

    Javascript学习笔记 delete运算符

    关于javascript的delete运算符,MDN里有相关文档。以下是我的学习笔记,更多是要关注特殊情况的使用和注意点。
    2011-09-09
  • js获取内联样式的方法

    js获取内联样式的方法

    这篇文章主要介绍了js获取内联样式的方法,针对标准浏览器与IE浏览器进行不同的判断与获取,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • 微信小程序图片加载失败时替换为默认图片的方法

    微信小程序图片加载失败时替换为默认图片的方法

    这篇文章主要介绍了微信小程序图片加载失败时替换为默认图片的方法,本文分情况通过实例代码给大家讲解,需要的朋友可以参考下
    2019-12-12
  • Three.js 中的屏幕空间环境光遮蔽SSAO

    Three.js 中的屏幕空间环境光遮蔽SSAO

    这篇文章主要为大家介绍了Three.js 中屏幕空间环境光遮蔽SSAO的原理及实现解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 微信小程序实现两边小中间大的轮播效果的示例代码

    微信小程序实现两边小中间大的轮播效果的示例代码

    这篇文章主要介绍了微信小程序实现两边小中间大的轮播效果的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • 正则 js分转元带千分符号详解

    正则 js分转元带千分符号详解

    下面小编就为大家带来一篇正则 js分转元带千分符号详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • JavaScript前端控制网络并发数目的常见方法小结

    JavaScript前端控制网络并发数目的常见方法小结

    控制前端发起请求的并发数,即限制同一时间内进行处理的请求数量,是一种有效的策略,本文将详细介绍前端控制并发数的几种常见做法,希望对大家有所帮助
    2023-12-12

最新评论