Тут є кілька помилок:
По-перше, термінологія. "Епоха" означає вихідну точку чогось. "Епоха Unix" - опівночі, 1 січня 1970 UTC. Ви не можете перетворити довільний "рядок дати в епоху". Ви, мабуть, мали на увазі "Час Unix" , який часто помилково називають "Часом Епохи".
.unix()
повертає час Unix за цілі секунди, але moment
конструктор за замовчуванням приймає позначку часу в мілісекундах . Натомість слід використовувати .valueOf()
для повернення мілісекунд. Зауважте, що дзвінок .unix()*1000
також буде працювати, але це призведе до втрати точності.
Ви аналізуєте рядок, не вказавши специфікатор формату. Це не є гарною ідеєю, оскільки такі значення, як 1/2/2014, можна трактувати як 1 лютого, так і як 2 січня, залежно від локалі, де працює код. (Ось чому ви також отримуєте попередження про припинення використання в консолі.) Натомість надайте рядок формату, який відповідає очікуваному вводу, наприклад:
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);
На моїй машині в американському тихоокеанському часовому поясі це призводить до:
Значення: ts = 1413388800000, s = 15.10.2014 9:00
Оскільки вхідне значення інтерпретується з точки зору місцевого часу, ви отримаєте інше значення, ts
якщо ви перебуваєте в іншому часовому поясі.
Також зверніть увагу, що якщо ви дійсно хочете працювати цілими секундами (можливо, втрачаючи точність), у моменту також є методи для цього. Ви можете використовувати, .unix()
щоб повернути мітку часу за цілі секунди і moment.unix(ts)
проаналізувати її назад до моменту.
var ts = moment("10/15/2014 9:00", "M/D/YYYY H:mm").unix();
var m = moment.unix(ts);