javascript - 使用 momentjs 将日期转换为纪元然后返回日期

标签 javascript date momentjs

我正在尝试将日期字符串转换为纪元,然后将纪元转换回日期字符串以验证我提供的日期字符串是否正确。

var epoch = moment("10/15/2014 9:00").unix(); // do I need to do .local()?
var momentDate = moment(epoch); // I've also tried moment.utc(epoch) 
var momentDateStr = momentDate.calendar();
alert("Values are: epoch = " + epoch + ", momentDateStr = " + momentDateStr);

渲染

Values are: epoch = 1413378000, momentDateStr = 01/17/1970

注意:我正在使用以下版本的 moment js 脚本,//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.3/moment-with-locales.js

最佳答案

这里有一些错误:

  • 首先,术语。 "Epoch"指事物的起点。 “Unix 纪元”是世界标准时间 1970 年 1 月 1 日午夜。您不能将任意“日期字符串转换为纪元”。你可能是说 "Unix Time" ,通常被错误地称为“大纪元时间”。

  • .unix()以整秒返回 Unix 时间,但默认的 moment 构造函数接受以 毫秒 为单位的时间戳。您应该改用 .valueOf()返回毫秒。请注意,调用 .unix()*1000 也可以,但会导致精度损失。

  • 您在不提供格式说明符的情况下解析字符串。这不是一个好主意,因为像 1/2/2014 这样的值可以解释为 2 月 1 日或 1 月 2 日,具体取决于运行代码的区域设置。 (这也是您在控制台中收到弃用警告的原因。)而是提供 format string。匹配预期的输入,例如:

    moment("10/15/2014 9:00", "M/D/YYYY H:mm")
    
  • .calendar()有非常具体的用途。如果您接近日期,它将返回类似“今天上午 9:00”的值。如果这不是您所期望的,您应该使用 .format()代替功能。同样,您可能想要传递格式说明符。

  • 要在评论中回答您的问题,不,您不需要调用 .local().utc()

综合起来:

var ts = moment("10/15/2014 9:00", "M/D/YYYY H:mm").valueOf();
var m = moment(ts);
var s = m.format("M/D/YYYY H:mm");
alert("Values are: ts = " + ts + ", s = " + s);

在我的机器上,在美国太平洋时区,结果是:

Values are: ts = 1413388800000, s = 10/15/2014 9:00

由于输入值是根据本地时间解释的,如果您处于不同的时区,您将获得不同的 ts 值。

另请注意,如果您真的想使用整秒(可能会失去精度),moment 也有相应的方法。您将使用 .unix() 返回整秒的时间戳,并使用 moment.unix(ts) 将其解析回某个时刻。

var ts = moment("10/15/2014 9:00", "M/D/YYYY H:mm").unix();
var m = moment.unix(ts);

关于javascript - 使用 momentjs 将日期转换为纪元然后返回日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26392280/

相关文章:

php - 'c' 或 'r' 日期格式如何在 PHP 中工作?

javascript - 使用 moment.js 获取从月初到今天的过去天数

javascript - momentJs add days 返回 moment 对象而不是日期

javascript - 如何使用 momentjs 获取特定的日期格式?

javascript - 将 Javascript 对象解析为类似 JSON 的字符串,但使用单引号

javascript - 如何使用javascript隐藏滚动条而不影响主体宽度?

javascript - Angularjs 有条件地编辑模型

javascript - Flux 是将异步数据获取到我的 React.JS View 的正确解决方案吗

javascript - 添加 1 天后的日期问题

python - 使用 pymysql 在 MySql 中插入空日期