前后端分离开发中,时间数据的传递常依赖时间戳,但C#和JavaScript的时间戳规范不同,直接对接容易出现时间偏差。C#的时间戳默认以0001年1月1日为基准,单位是100纳秒,而JS的Unix时间戳以1970年1月1日UTC时间为基准,单位是毫秒,两者的转换需要先统一基准和精度。

C#时间戳转JS时间戳
C#中如果需要生成符合JS规范的Unix时间戳,通常需要从当前时间减去1970年1月1日的基准时间,再换算成毫秒单位。以下是通用实现代码:
using System;
public class TimeStampHelper
{
// C#时间转JS Unix时间戳(毫秒级)
public static long CSharpToJsTimeStamp(DateTime csharpTime)
{
// JS时间戳基准时间:1970-01-01 UTC
DateTime jsBaseTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
// 计算时间差,转成毫秒
TimeSpan timeSpan = csharpTime.ToUniversalTime() - jsBaseTime;
return (long)timeSpan.TotalMilliseconds;
}
// 测试示例
public static void TestCSharpToJs()
{
DateTime now = DateTime.Now;
long jsTimeStamp = CSharpToJsTimeStamp(now);
Console.WriteLine($"当前C#时间:{now}");
Console.WriteLine($"转换后的JS时间戳:{jsTimeStamp}");
}
}JS时间戳转C#时间戳
JS传递过来的毫秒级时间戳,在C#中需要先转换为DateTime类型,同样要基于Unix基准时间累加对应的毫秒数,同时注意时区处理,避免本地时间和UTC时间混淆。
using System;
public class TimeStampHelper
{
// JS Unix时间戳(毫秒级)转C#时间
public static DateTime JsToCSharpTimeStamp(long jsTimeStamp)
{
// JS时间戳基准时间:1970-01-01 UTC
DateTime jsBaseTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
// 累加毫秒数,得到UTC时间
DateTime utcTime = jsBaseTime.AddMilliseconds(jsTimeStamp);
// 转成本地时间(如果需要的话)
return utcTime.ToLocalTime();
}
// 测试示例
public static void TestJsToCSharp()
{
long jsTimeStamp = 1717238400000; // 示例JS时间戳
DateTime csharpTime = JsToCSharpTimeStamp(jsTimeStamp);
Console.WriteLine($"JS时间戳:{jsTimeStamp}");
Console.WriteLine($"转换后的C#时间:{csharpTime}");
}
}JavaScript侧时间戳处理
JS生成时间戳时直接使用内置方法即可,拿到后可以直接传递给后端,如果需要校验也可以直接转换回时间格式:
// JS生成当前时间的Unix时间戳(毫秒级)
function getJsTimeStamp() {
return Date.now();
}
// JS时间戳转本地时间字符串
function jsTimeStampToStr(timeStamp) {
const date = new Date(timeStamp);
return date.toLocaleString();
}
// 测试示例
const nowTimeStamp = getJsTimeStamp();
console.log(`当前JS时间戳:${nowTimeStamp}`);
console.log(`时间戳转时间:${jsTimeStampToStr(nowTimeStamp)}`);转换注意事项
- 时区问题:C#的
DateTime有本地时间和UTC时间的区分,转换时建议先统一转成UTC时间计算,避免时区偏移导致的误差 - 精度问题:C#原生的时间戳单位是100纳秒,转换时要正确换算成毫秒,避免丢失精度
- 时间戳类型:如果对接的JS时间戳是秒级的,需要在转换时先乘以1000再处理,否则会得到错误的时间
实际开发中如果需要处理更高精度的时间,或者跨时区场景,建议在前后端统一使用UTC时间进行传递,仅在展示时做本地时区转换,减少转换出错的概率。
C#JavaScript时间戳互转Unix时间戳修改时间:2026-06-07 01:13:47